рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

Scala Traits

рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдорджрдж рд╕реЗ Scala рдореЗрдВ traits рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВред
┬╖ 6 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

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{
// Variables
// Methods
}
scala trait syntax


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджреА рдЧрдИ trait рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, DataCamp рдирд╛рдо рдХрд╛ рдПрдХ trait рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рднреА рд╡реЗрд░рд┐рдПрдмрд▓ рдпрд╛ рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

рдЖрдЗрдП Scala traits рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЗрдирдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдФрд░ рд╕реНрдкрд╖реНрдЯрддрд╛ рджреЗрдЧрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ introduction рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, Scala Traits рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ extends рдХреАрд╡рд░реНрдб рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

class Scala_Tutorial extends DataCamp{
// Variables
// Methods
}

рдЖрдЗрдП 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()  
    }  
}

рдЕрдм рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВред

example


рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, scala() рд╡рд┐рдзрд┐ abstract рдереА, рдЗрд╕рд▓рд┐рдП рдЙрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдЙрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рджреА рдЧрдИ рдЬрд┐рд╕рдиреЗ рдЙрд╕ trait рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдпрд╛ред

рд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ (non-abstract) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА trait рдореЗрдВ implement рдХреА рдЧрдИ рд╣реЛ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдРрд╕реЗ рдореЗрдВ, рд╡рд╣ рдХреНрд▓рд╛рд╕ рдЬреЛ рдЗрд╕ trait рдХреЛ extend рдХрд░рддреА рд╣реИ, рдЙрд╕реЗ рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЛ рджреЛрдмрд╛рд░рд╛ implement рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреАред

рдЗрд╕реЗ рдПрдХ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВред

trait BMW{

    // trait variables
    var make: String = "BMW"
    var model: String = "X7"
    var fuel: Int = 40

    // trait method: NON-ABSTRACT
    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{
    // class variables
    var make1: String = "Mercedes Benz"
    var model1: String = "S350D"
    var fuel1: Int = 50

    // Class method
    def Merc_Specs()
    {
        println("Make of the Car : " + make1);
        println("Model of the Car : " + model1);
        println("Fuel capacity of the Car : " + fuel1);
    }
}

object Main  
{

    // Main method
    def main(args: Array[String])  
    {

        // Class object
        var obj = new Car();
        println("Calling the Class Method")
        obj.Merc_Specs();
        println("Calling the Trait Method")
        obj.Display();
    }
}

рдЖрдЗрдП рдКрдкрд░ рдХреЗ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

example


рдЕрдм рдЬрдм рдЖрдкрдиреЗ 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) рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдиреЗ рдЙрд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд┐рдпрд╛ рдерд╛ред

example

рдКрдкрд░ рдХреЗ рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

  • DataCamp рдХреНрд▓рд╛рд╕ рдореЗрдВ scala() рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдпрд╛
  • DataCamp рдХреНрд▓рд╛рд╕ рдХреЛ abstract рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред

рдЖрдЬ рдХреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдВрддрд┐рдо рд╡рд┐рд╖рдп рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╣реА рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ traits рдХреЛ рдХреИрд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдЖрдЗрдП, рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред

trait A{
// methods
}
trait B{
// methods
}
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  
{

    // Main method
    def main(args: Array[String])  
    {

        // Class object
        var obj = new Car();
        println("Calling the BMW Trait")
        obj.BMW_Specs();
        println();
        println("Calling the Merc Trait")
        obj.Merc_Specs();
    }
}

рдЕрдВрдд рдореЗрдВ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВред

example

Congratulations!

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ рдмрдзрд╛рдИред

рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ Traits рдХреНрдпрд╛ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ Scala рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдвреЗрдВ рдЬрдм abstract рд╡рд┐рдзрд┐ рдХреЛ рдЙрд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреНрд▓рд╛рд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдЙрд╕реА рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдХрд░ рджреЗрдЦреЗрдВ рдФрд░ рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдб рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЗ рдЪрд▓рддрд╛ рд╣реИред рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрдХреЗрдд: рдЖрдк Scala рдореЗрдВ Abstract Classes рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рдХреГрдкрдпрд╛ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдИ рднреА рдкреНрд░рд╢реНрди рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рдЕрдВрдд рдореЗрдВ, DataCamp рдкрд░ рдирдпрд╛ Scala рдХреЛрд░реНрд╕ рд▓реЗрдирд╛ рди рднреВрд▓реЗрдВ, Introduction to Scalaред

рд╡рд┐рд╖рдп