DataCamp рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ Scala рдХреЛрд░реНрд╕ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рд╣реИ: Introduction to Scala ред рдЗрд╕реЗ рджреЗрдЦреЗрдВ!
рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднреА рдкрдврд╝рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:
Introduction
Trait рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рдпреБрдХреНрдд рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИред
Traits, рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ interfaces рдХреА рднрд╛рд╡рдирд╛ рд╕реЗ рдорд┐рд▓рддреЗ-рдЬреБрд▓рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, Scala traits рдХреЛ instantiate рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдФрд░ рдЗрдирдХреЗ рдХреЛрдИ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛрддреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдЗрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рд╕реЛрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдирд╣реЗрд░рд┐рдЯ (extend) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, traits рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдзрд┐рдпрд╛рдБ/рдлрдВрдХреНрд╢рдВрд╕ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд▓рд╛рд╕ рдХреБрдЫ рд╡рд┐рдзрд┐рдпрд╛рдБ implement рдХрд░реЗ, рдЬреЛ рджрд┐рдП рдЧрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░рд╛рдЗрдЬрд╝ рдХрд░рддреА рд╣реИрдВред
рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ trait, рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдорд┐рд╢реНрд░рдг рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд▓рд╛рд╕реЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрд┐рдирд╛ multiple inheritance рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рджреЛ traits рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреА рд╡рд┐рдзрд┐ рд╣реЛ (naming collision), рдФрд░ рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдХреЛ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛтАФрдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрд▓рдЭрд╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
Traits рдореЗрдВ abstract рдФрд░ non-abstract рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рдлреАрд▓реНрдбреНрд╕ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдХрд┐рд╕реА trait рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ initialize рдирд╣реАрдВ рдХрд░рддреЗ, рддреЛ рд╡рд╣ abstract рд╣реЛрддреА рд╣реИ; рдЬрдмрдХрд┐ рдЬреЛ initialize рдХреА рдЧрдИ рд╣реЛрдВ рд╡реЗ non-abstract рдХрд╣рд▓рд╛рддреА рд╣реИрдВред Abstract рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, trait рдХреЛ implement рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреНрд▓рд╛рд╕ initialization рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддреА рд╣реИред
рдЕрдм рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдорджрдж рд╕реЗ Scala traits рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВ!
Scala Trait Syntax
Scala trait рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реАрдзрд╛-рд╕рд╛рджрд╛ рд╣реИтАФрдЗрд╕реЗ trait рдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж trait рдХреЗ рдирд╛рдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
trait Trait_Name{
}
рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджреА рдЧрдИ trait рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, DataCamp рдирд╛рдо рдХрд╛ рдПрдХ trait рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рднреА рд╡реЗрд░рд┐рдПрдмрд▓ рдпрд╛ рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред
рдЖрдЗрдП Scala traits рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЗрдирдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдФрд░ рд╕реНрдкрд╖реНрдЯрддрд╛ рджреЗрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ introduction рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, Scala Traits рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ extends рдХреАрд╡рд░реНрдб рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
class Scala_Tutorial extends DataCamp {
}
рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЖрдЗрдП Scala_Course рдирд╛рдо рдХрд╛ рдПрдХ trait рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ DataCamp рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред trait рдХреЗ рдЕрдВрджрд░, рдЖрдк abstract method scala() рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ DataCamp рдХреНрд▓рд╛рд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
trait Scala_Course{
def scala ( )
}
class DataCamp extends Scala_Course {
def scala ( ) {
println ( "DataCamp has recently launched there first Scala course" )
}
}
object Main{
def main ( args : Array[ String] ) {
var a = new DataCamp ( )
a. scala ( )
}
}
рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЕрдм рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, scala() рд╡рд┐рдзрд┐ abstract рдереА, рдЗрд╕рд▓рд┐рдП рдЙрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдЙрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рджреА рдЧрдИ рдЬрд┐рд╕рдиреЗ рдЙрд╕ trait рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдпрд╛ред
рд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ (non-abstract) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА trait рдореЗрдВ implement рдХреА рдЧрдИ рд╣реЛ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдРрд╕реЗ рдореЗрдВ, рд╡рд╣ рдХреНрд▓рд╛рд╕ рдЬреЛ рдЗрд╕ trait рдХреЛ extend рдХрд░рддреА рд╣реИ, рдЙрд╕реЗ рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЛ рджреЛрдмрд╛рд░рд╛ implement рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреАред
рдЗрд╕реЗ рдПрдХ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВред
trait BMW {
var make : String = "BMW"
var model : String = "X7"
var fuel : Int = 40
def Display ( )
{
println ( "Make of the Car : " + make) ;
println ( "Model of the Car : " + model) ;
println ( "Fuel capacity of the Car : " + fuel) ;
}
}
class Car extends BMW {
var make1 : String = "Mercedes Benz"
var model1 : String = "S350D"
var fuel1 : Int = 50
def Merc_Specs ( )
{
println ( "Make of the Car : " + make1) ;
println ( "Model of the Car : " + model1) ;
println ( "Fuel capacity of the Car : " + fuel1) ;
}
}
object Main
{
def main ( args : Array[ String] )
{
var obj = new Car ( ) ;
println ( "Calling the Class Method" )
obj. Merc_Specs ( ) ;
println ( "Calling the Trait Method" )
obj. Display ( ) ;
}
}
рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЖрдЗрдП рдКрдкрд░ рдХреЗ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
рдЕрдм рдЬрдм рдЖрдкрдиреЗ abstract рдФрд░ non-abstract рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╕рдордЭ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдЖрддреА рд╣реИ рдЬрдм рдХрд┐рд╕реА abstract рд╡рд┐рдзрд┐ рдХреЛ рдЙрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ implement рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдЬреЛ рдЙрд╕реЗ inherits рдпрд╛ extends рдХрд░рддреА рд╣реИред
рдЗрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП same рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
trait Scala_Course{
def scala ( )
}
class DataCamp extends Scala_Course {
def print ( ) {
println ( "Error: Class DataCamp needs to be Abstract" )
}
}
object Main{
def main ( args : Array[ String] ) {
var a = new DataCamp ( )
a. print ( )
}
}
рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐ рдЖрддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЙрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ trait рдХреА scala() (abstract) рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдиреЗ рдЙрд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдпрд╛ рдерд╛ред
рдКрдкрд░ рдХреЗ рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
DataCamp рдХреНрд▓рд╛рд╕ рдореЗрдВ scala() рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдпрд╛
DataCamp рдХреНрд▓рд╛рд╕ рдХреЛ abstract рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред
рдЖрдЬ рдХреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдВрддрд┐рдо рд╡рд┐рд╖рдп рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╣реА рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ traits рдХреЛ рдХреИрд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдЖрдЗрдП, рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред
trait A {
}
trait B {
}
class C extends A with B {
}
рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
trait BMW {
var make : String = "BMW"
var model : String = "X7"
var fuel : Int = 40
}
trait Merc{
var make1 : String = "Mercedes Benz"
var model1 : String = "S350D"
var fuel1 : Int = 50
}
class Car extends BMW with Merc{
def BMW_Specs ( )
{
println ( "Make of the Car : " + make) ;
println ( "Model of the Car : " + model) ;
println ( "Fuel capacity of the Car : " + fuel) ;
}
def Merc_Specs ( )
{
println ( "Make of the Car : " + make1) ;
println ( "Model of the Car : " + model1) ;
println ( "Fuel capacity of the Car : " + fuel1) ;
}
}
object Main
{
def main ( args : Array[ String] )
{
var obj = new Car ( ) ;
println ( "Calling the BMW Trait" )
obj. BMW_Specs ( ) ;
println ( ) ;
println ( "Calling the Merc Trait" )
obj. Merc_Specs ( ) ;
}
}
рд╕рдВрдЪрд╛рд▓рд┐рдд рджреНрд╡рд╛рд░рд╛
рдЕрдВрдд рдореЗрдВ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
Congratulations!
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ рдмрдзрд╛рдИред
рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ Traits рдХреНрдпрд╛ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ Scala рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдвреЗрдВ рдЬрдм abstract рд╡рд┐рдзрд┐ рдХреЛ рдЙрд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреНрд▓рд╛рд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдЙрд╕реА рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдХрд░ рджреЗрдЦреЗрдВ рдФрд░ рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдб рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЗ рдЪрд▓рддрд╛ рд╣реИред рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрдХреЗрдд: рдЖрдк Scala рдореЗрдВ Abstract Classes рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рдХреГрдкрдпрд╛ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдИ рднреА рдкреНрд░рд╢реНрди рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред
рдЕрдВрдд рдореЗрдВ, DataCamp рдкрд░ рдирдпрд╛ Scala рдХреЛрд░реНрд╕ рд▓реЗрдирд╛ рди рднреВрд▓реЗрдВ, Introduction to Scala ред
DataCamp рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ Scala рдХреЛрд░реНрд╕ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рд╣реИ: Introduction to Scalaред рдЗрд╕реЗ рджреЗрдЦреЗрдВ!
рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднреА рдкрдврд╝рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:
Introduction
Trait рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рдпреБрдХреНрдд рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИред
Traits, рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ interfaces рдХреА рднрд╛рд╡рдирд╛ рд╕реЗ рдорд┐рд▓рддреЗ-рдЬреБрд▓рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, Scala traits рдХреЛ instantiate рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдФрд░ рдЗрдирдХреЗ рдХреЛрдИ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛрддреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рдЗрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рд╕реЛрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдирд╣реЗрд░рд┐рдЯ (extend) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, traits рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдзрд┐рдпрд╛рдБ/рдлрдВрдХреНрд╢рдВрд╕ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд▓рд╛рд╕ рдХреБрдЫ рд╡рд┐рдзрд┐рдпрд╛рдБ implement рдХрд░реЗ, рдЬреЛ рджрд┐рдП рдЧрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░рд╛рдЗрдЬрд╝ рдХрд░рддреА рд╣реИрдВред
рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ trait, рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдорд┐рд╢реНрд░рдг рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд▓рд╛рд╕реЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрд┐рдирд╛ multiple inheritance рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдкрд╡рд╛рдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рджреЛ traits рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреА рд╡рд┐рдзрд┐ рд╣реЛ (naming collision), рдФрд░ рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдХреЛ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛтАФрдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрд▓рдЭрд╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
Traits рдореЗрдВ abstract рдФрд░ non-abstract рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рдлреАрд▓реНрдбреНрд╕ рд╕рджрд╕реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдХрд┐рд╕реА trait рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ initialize рдирд╣реАрдВ рдХрд░рддреЗ, рддреЛ рд╡рд╣ abstract рд╣реЛрддреА рд╣реИ; рдЬрдмрдХрд┐ рдЬреЛ initialize рдХреА рдЧрдИ рд╣реЛрдВ рд╡реЗ non-abstract рдХрд╣рд▓рд╛рддреА рд╣реИрдВред Abstract рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, trait рдХреЛ implement рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреНрд▓рд╛рд╕ initialization рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддреА рд╣реИред
рдЕрдм рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдорджрдж рд╕реЗ Scala traits рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВ!
Scala Trait Syntax
Scala trait рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реАрдзрд╛-рд╕рд╛рджрд╛ рд╣реИтАФрдЗрд╕реЗ
traitрдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж trait рдХреЗ рдирд╛рдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджреА рдЧрдИ trait рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ,
DataCampрдирд╛рдо рдХрд╛ рдПрдХ trait рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рднреА рд╡реЗрд░рд┐рдПрдмрд▓ рдпрд╛ рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИредрдЖрдЗрдП Scala traits рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЗрдирдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдФрд░ рд╕реНрдкрд╖реНрдЯрддрд╛ рджреЗрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ introduction рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, Scala Traits рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛
extendsрдХреАрд╡рд░реНрдб рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВредрдЖрдЗрдП
Scala_Courseрдирд╛рдо рдХрд╛ рдПрдХ trait рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕реЗDataCampрдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редtraitрдХреЗ рдЕрдВрджрд░, рдЖрдк abstract methodscala()рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗDataCampрдХреНрд▓рд╛рд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрдЕрдм рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
scala()рд╡рд┐рдзрд┐ abstract рдереА, рдЗрд╕рд▓рд┐рдП рдЙрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдЙрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рджреА рдЧрдИ рдЬрд┐рд╕рдиреЗ рдЙрд╕ trait рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдпрд╛редрд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ (non-abstract) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА trait рдореЗрдВ implement рдХреА рдЧрдИ рд╣реЛ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдРрд╕реЗ рдореЗрдВ, рд╡рд╣ рдХреНрд▓рд╛рд╕ рдЬреЛ рдЗрд╕ trait рдХреЛ extend рдХрд░рддреА рд╣реИ, рдЙрд╕реЗ рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЛ рджреЛрдмрд╛рд░рд╛ implement рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреАред
рдЗрд╕реЗ рдПрдХ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВред
рдЖрдЗрдП рдКрдкрд░ рдХреЗ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
рдЕрдм рдЬрдм рдЖрдкрдиреЗ
abstractрдФрд░non-abstractрд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╕рдордЭ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдЖрддреА рд╣реИ рдЬрдм рдХрд┐рд╕реАabstractрд╡рд┐рдзрд┐ рдХреЛ рдЙрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ implement рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдЬреЛ рдЙрд╕реЗinheritsрдпрд╛extendsрдХрд░рддреА рд╣реИредрдЗрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП same рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐ рдЖрддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЙрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ trait рдХреА
scala()(abstract) рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдиреЗ рдЙрд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдпрд╛ рдерд╛редрдКрдкрд░ рдХреЗ рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
DataCampрдХреНрд▓рд╛рд╕ рдореЗрдВscala()рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдпрд╛abstractрдШреЛрд╖рд┐рдд рдХрд░реЗрдВредрдЖрдЬ рдХреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдВрддрд┐рдо рд╡рд┐рд╖рдп рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╣реА рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ traits рдХреЛ рдХреИрд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдЖрдЗрдП, рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
Congratulations!
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ рдмрдзрд╛рдИред
рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ Traits рдХреНрдпрд╛ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ Scala рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдвреЗрдВ рдЬрдм abstract рд╡рд┐рдзрд┐ рдХреЛ рдЙрд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреНрд▓рд╛рд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдЙрд╕реА рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдХрд░ рджреЗрдЦреЗрдВ рдФрд░ рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдб рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЗ рдЪрд▓рддрд╛ рд╣реИред рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрдХреЗрдд: рдЖрдк Scala рдореЗрдВ Abstract Classes рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рдХреГрдкрдпрд╛ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдИ рднреА рдкреНрд░рд╢реНрди рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред
рдЕрдВрдд рдореЗрдВ, DataCamp рдкрд░ рдирдпрд╛ Scala рдХреЛрд░реНрд╕ рд▓реЗрдирд╛ рди рднреВрд▓реЗрдВ, Introduction to Scalaред