1(self.webpackChunkgatsby_starter_ts=self.webpackChunkgatsby_starter_ts||[]).push([[8737],{8703:function(e,t,l){"use strict";l.r(t),l.d(t,{EssentialScalaAbstract:function(){return C},default:function(){return f}});var n=l(4241),a=l(9738),r=l(8979),c=l(8756),s=l(6586),o=l(5359),u=l(2373),i=l(7690),m=l(9305),E=l(1531),p=l(7294);function C(){return p.createElement(i.xu,null,p.createElement(a.Z,{days:3}),p.createElement(o.Z,null,"A conversion course to Scala for developers from other languages. We'll get you coding the right way as quickly as possible with equal doses of FP theory and hands-on labs. If you are an experienced developer taking your first steps in Scala, this is the course for you."))}function d(){return p.createElement(i.xu,null,p.createElement(c.Z,{level:"subsection"},"The Mechanics of Scala"),p.createElement(m.QI,{mb:"8"},p.createElement(m.HC,null,"Expressions, types, and values"),p.createElement(m.HC,null,"Reasoning using substitution"),p.createElement(m.HC,null,"Method and value definitions"),p.createElement(m.HC,null,"Scala's type hierarchy"),p.createElement(m.HC,null,"Objects and classes"),p.createElement(m.HC,null,"Structure of a Scala application")),p.createElement(c.Z,{level:"subsection"},"Modelling Data"),p.createElement(m.QI,{mb:"8"},p.createElement(m.HC,null,"Algebraic Data Types"),p.createElement(m.HC,null,"Case classes and sealed traits"),p.createElement(m.HC,null,"Pattern matching"),p.createElement(m.HC,null,"Common examples of ADTs")),p.createElement(c.Z,{level:"subsection"},"Collections and Computations"),p.createElement(m.QI,{mb:"8"},p.createElement(m.HC,null,"Traversing Lists and Options"),p.createElement(m.HC,null,"Error handling with Option and Either"),p.createElement(m.HC,null,"The map and flatMap methods"),p.createElement(m.HC,null,"For comprehensions"),p.createElement(m.HC,null,"Monads!")),p.createElement(c.Z,{level:"subsection"},"Generic Types"),p.createElement(m.QI,{mb:"8"},p.createElement(m.HC,null,"Type parameters on classes and methods"),p.createElement(m.HC,null,"Generalised Algebraic Data Types"),p.createElement(m.HC,null,"Variance and type bounds"),p.createElement(m.HC,null,"Functors!")),p.createElement(c.Z,{level:"subsection"},"Type Classes"),p.createElement(m.QI,{mb:"8"},p.createElement(m.HC,null,"The type class pattern"),p.createElement(m.HC,null,"Implicit parameters and values"),p.createElement(m.HC,null,"Rules of implicit resolution"),p.createElement(m.HC,null,"Recursive implicit resolution"),p.createElement(m.HC,null,"Packaging implicits")),p.createElement(c.Z,{level:"subsection"},"Asynchronous and Concurrent Programming in Scala"),p.createElement(m.QI,{mb:"8"},p.createElement(m.HC,null,"Parallelism versus concurrency"),p.createElement(m.HC,null,"Models of concurrency"),p.createElement(m.HC,null,"Practical exercises with your choice of:",p.createElement(m.QI,null,p.createElement(m.HC,null,"scala.concurrent, or"),p.createElement(m.HC,null,"Cats Effect")))))}function h(){return p.createElement(i.xu,{flexGrow:0,flexShrink:0,width:"200px",ml:["0","8"]},p.createElement(c.Z,{level:"subsection"},"Course Books"),p.createElement(o.Z,{fontSize:"xs"},"The content for this course is open source:"),p.createElement(E.E,{my:"8",src:"/images/books/essential-scala.jpg"}),p.createElement(o.Z,{textAlign:"center"},p.createElement(s.Z,{to:"https://underscore.io/books/essential-scala/",size:"sm",variant:"outline"},"Read Online")))}function f(e){return p.createElement(r.Z,{title:"Essential Scala (in Space)",category:"scala",accent:"red",abstract:p.createElement(C,null),bookingForm:p.createElement(n.Z,{defaultCourse:"essential-scala"}),picture:p.createElement(u.Z,{name:"rocket",maxW:"96",mx:"auto"}),outline:p.createElement(d,null),sidebar:p.createElement(h,null)})}}}]); 2//# sourceMappingURL=component---src-pages-training-essential-scala-tsx-2226aa74aead6ff9c645.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.