Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Scala?

Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π½Π΅ самый популярный язык.

ВстрСчали Π² вакансиях ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½Π° Scala? Π­Ρ‚ΠΎ Ρ€Π΅Π΄ΠΊΠΈΠΉ Π·Π²Π΅Ρ€ΡŒ, Π½ΠΎ платят Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. РазбСрёмся, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ языка рассчитывал, Ρ‡Ρ‚ΠΎ Scala станСт ΠΏΡ€Π΅Π΅ΠΌΠ½ΠΈΠΊΠΎΠΌ Java: ΠΎΠ½ наслСдуСт ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ ΠΈΠ· Java, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ схоТим ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ ΠΈ добавляСт Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ своё. И хотя Scala Π½Π΅ стал Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ распространённым, всё Ρ€Π°Π²Π½ΠΎ стоит ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΈΠ· Ρ‡Π΅Π³ΠΎ ΠΎΠ½ сдСлан.

ΠŸΠ»ΡŽΡΡ‹ Scala

Scala, ΠΊΠ°ΠΊ ΠΈ Java, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ JVM β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Java (Java Virtual Machine). JVM β€” это такая прослойка ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ ΠΆΠ΅Π»Π΅Π·ΠΎΠΌ. Благодаря этой прослойкС ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π° Ρ‡Ρ‘ΠΌ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, для Ρ‡Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ JVM: ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΈ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ ΠΎΠΏΠ»Π°Ρ‚Ρ‹, ΠΈ Π½Π° ΡƒΠΌΠ½ΠΎΠΌ Ρ…ΠΎΠ»ΠΎΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊΠ΅. НС Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π΄ΡƒΠΌΠ°Ρ‚ΡŒ: «А ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚Π°ΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ экрана?Β» ΠΈΠ»ΠΈ Β«Π‘ ΠΊΠ°ΠΊΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСтСвой шлюз?Β» β€” всё это Π±Π΅Ρ€Ρ‘Ρ‚ Π½Π° сСбя JVM, Π° ΠΌΡ‹ пишСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ интСрфСйс.

ΠœΠΈΠ½ΡƒΡΡ‹ Scala

Но Ссли всё Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚Π°ΠΊ просто, ΠΏΡ€ΠΎ Java всС Π΄Π°Π²Π½ΠΎ Π±Ρ‹ Π·Π°Π±Ρ‹Π»ΠΈ, Π½ΠΎ этого Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, сСйчас Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Scala-вакансий Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ популярности этого языка. На это Π΅ΡΡ‚ΡŒ нСсколько ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

Бинтаксис

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΊΠΎΠ΄Π° Π² Scala всё Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Π² Java-языках, ΠΊΡ€ΠΎΠΌΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ООП-особСнностСй, поэтому Π½Π°Ρ‡Π½Ρ‘ΠΌ с ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ отличиям.

ΠžΡΠ½ΠΎΠ²Ρ‹. КаТдая ΠΊΠΎΠΌΠ°Π½Π΄Π° заканчиваСтся Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой, Π° присваиваниС ΠΈ матСматичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² Java ΠΈ JavaScript.

Π’ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠΌΠ½ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π² любом Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ языкС. Как ΠΈ Π² Ruby, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. ΠžΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ слуТСбных слов val ΠΈ var, Π½ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π² Scala Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ размытая ΠΈ нСпрозрачная, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ слово Π±ΡƒΠ΄Π΅Ρ‚ умСстнСС Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ситуации.

УсловныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹. Всё ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎ β€” for, while ΠΈ do-while, Π½ΠΎ с ΠΎΠ΄Π½ΠΈΠΌ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ: Π² Ρ†ΠΈΠΊΠ»Π΅ for примСняСтся упрощённая запись для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ†ΠΈΠΊΠ»Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅ β€” сколько Ρ‚Π°Π½Ρ†Π΅Π² с Π±ΡƒΠ±Π½ΠΎΠΌ Ρ€Π°Π΄ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сам Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ строки (Π½Π΅ считая коммСнтария):

ΠšΡ‚ΠΎ ΠΈ для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Scala

Π£ Scala Π½Π΅Ρ‚ явно Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠΉ области примСнСния, ΠΊΠ°ΠΊ Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языков. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈΠ·-Π·Π° объСдинСния ООП ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования этот язык приТился Π² Ρ‚Π΅Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°.

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ прСимущСство β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π² любом JVM-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, поэтому Scala Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ Ρ‚Π΅, ΠΊΠΎΠΌΡƒ нравится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π½ΠΎ Π½Π΅ нравится Ρ‚ΠΎ, ΠΊΠ°ΠΊ это сдСлано Π² Java.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ популярныС Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ β€” Play ΠΈ Lift, ΠΈ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² основном БМИ ΠΈ новостныС сайты:

Π‘ Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ основы Scala ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ свои силы Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π² ΠΌΠΈΡ€Π΅ Java, Ρ‚ΠΎ Π²ΠΎΡ‚ с Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ.

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ Π² RSDN Magazine β€” Β«ΠžΠ±Π·ΠΎΡ€ языка программирования ScalaΒ». Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΈ понятный ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», Π½ΠΎ ΠΏΠΎΠ΄Π°Π½ Π² сухом акадСмичСском стилС.

Β«Scala Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β» Π² Π’ΠΈΠΊΠΈΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ΅ β€” написано ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅, Π½ΠΎ Π±Π΅Π· ввСдСния для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ².

«Руководство ΠΏΠΎ ScalaΒ» Π² Записках Π·Π°Π΄ΡƒΠΌΡ‡ΠΈΠ²ΠΎΠ³ΠΎ программиста β€” просто, понятно, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π°Π²Ρ‚ΠΎΡ€ Π½Π΅ Π΄Π°Ρ‘Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Ρ… объяснСний Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ происходит Π² ΠΊΠΎΠ΄Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Быстрый старт со Scala для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

Быстрый старт со Scala для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ

Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. rock. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ-rock. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° rock

Scala – строгий статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ JVM-based язык, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. Π’ языкС Π΅ΡΡ‚ΡŒ классы, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка, Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ИспользованиС Java-ΠΊΠΎΠ΄Π° ΠΈΠ· Scala Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ трудностСй, синтаксичСски языки ΠΎΡ‡Π΅Π½ΡŒ Π±Π»ΠΈΠ·ΠΊΠΈ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ основныС элСмСнты языка, достаточныС для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ.

Настройка окруТСния

Scala β€” язык, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π½Π° JVM, поэтому для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ JDK (минимальная вСрсия 1.6). Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ ΠΎΡ‚ΡΡŽΠ΄Π°. ПослС установки JDK ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ установкС самой Scala. Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΡΠ²Π΅ΠΆΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС. ПослСдняя вСрсия Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ β€” 2.11.6.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ эти настройки, ΠΈΡ… Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π²

На Windows ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ другая:

ΠŸΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ эти ΠΎΠΏΡ†ΠΈΠΈ постоянно ΠΌΠΎΠΆΠ½ΠΎ Π² настройках систСмы: Control Panel β†’ Advanced System Settings β†’ Environmental Variables.

ПослС выполнСния всСх манипуляций ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, запустив:

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли Π²Ρ‹ устанавливаСтС sbt, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ установку scala, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ систСма сборки скачаСт Π΅Π΅ автоматичСски

Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ°ΠΏΠΊΡƒ src/main/scala ΠΈ src/test/scala ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² (ΠΊΠ°ΠΊ Π² Java). Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ, ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² любой ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ консоль:

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ выглядит Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой Π² Π½Π°Ρ‡Π°Π»Π΅ β€” это ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ синтаксиса):

ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠΎΠΌ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ REPL (Read-Eval-Print-Loop), ΠΈΠ»ΠΈ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, интСрактивная консоль. ΠžΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π² Π½Π΅ΠΉ нСбольшиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ просто ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ возмоТности языка. Для запуска REPL Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ sbt console Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ВсС! МоТно ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° Scala ΠΈ сразу ΠΆΠ΅ ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ:

ИспользованиС IDE для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Scala Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ сильно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс. Π‘ΠΊΠ°Π»Π° β€” язык со слоТной сСмантикой, поэтому возмоТности IDE Π±ΠΎΠ»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹, Ρ‡Π΅ΠΌ, скаТСм, ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π° Java. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΄Π°ΠΆΠ΅ простая подсвСтка Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ сильно ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Тизнь. Π‘Π°ΠΌΡ‹Π΅ популярныС IDE для Scala β€” это IntelliJ IDEA ΠΈ Eclipse. Для IDEA Π΅ΡΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΎΡ‚ JetBrains, Π² случаС с Eclipse Π΅ΡΡ‚ΡŒ Π΅Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Scala IDE.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, значСния ΠΈ Ρ‚ΠΈΠΏΡ‹.

Аналогичный ΠΊΠΎΠ΄ Π½Π° Java Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ сразу нСсколько приятных особСнностСй Scala:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Аналогичный ΠΊΠΎΠ΄ Π½Π° Java:

Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° apply подразумСваСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, поэтому использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ внСшнС выглядит ΠΊΠ°ΠΊ Π² Java:

ВсС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² позволяСт ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ, ΠΊΠ°ΠΊ с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ: ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΈ Ρ‚.Π΄., Ρ‡Ρ‚ΠΎ позволяСт Scala ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). Они ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ:

ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

И Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° Java:

Как Π²ΠΈΠ΄ΠΈΠΌ, public ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ конструктора доступны Π²ΠΎ всСм классС, локальноС ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Аналог Π½Π° Java Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΡƒΠ΄Π° Π±ΠΎΠ»Π΅Π΅ многословСн.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΈ Ρ‚Ρ€Π΅ΠΉΡ‚Ρ‹

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово override Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ Π΅Π³ΠΎ использованиС являСтся Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ особСнности ΠΈ отличия ΠΎΡ‚ Java

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ if / else всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ стоит послСдним ввыполняСмом Π±Π»ΠΎΠΊΠ΅. Π‘ΠΊΠΎΠ±ΠΊΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ условия ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, скобки Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ‚Π΅Π»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° инструкция, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.

Π‘Π»ΠΎΠΊ try / catch / finally выглядит Π² Scala Ρ‚Π°ΠΊ:

Π¦ΠΈΠΊΠ»Ρ‹ while Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π² Java:

А Ρ†ΠΈΠΊΠ»Ρ‹ for β€” Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, совсСм Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆΠΈ (ΠΎ Π½ΠΈΡ… ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅):

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ установили ΠΈ настроили срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для Scala, посмотрСли основныС элСмСнты языка, сходства с Java ΠΈ отличия ΠΎΡ‚ Π½Π΅Π΅. Π­Ρ‚ΠΎΠ³ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ простой ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠ΄. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим элСмСнты Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, case-классы, pattern-matching ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ высокоуровнСвыС особСнности языка.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Scala Tutorial β€” Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ Scala с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пошагового руководства

Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. belhouseakeesupna374462. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ-belhouseakeesupna374462. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° belhouseakeesupna374462

Ρ‚Π΅ΠΌΡ‹:

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Scala

Π£ Scala Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Π±Ρ‹Ρ‚ΡŒ популярными ΠΈ вострСбованными. НСмногиС ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ упомянуты Π½ΠΈΠΆΠ΅:

ΠžΠ±Π»Π°ΡΡ‚ΡŒ примСнСния

Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. akmagmoheadstenma762195. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ-akmagmoheadstenma762195. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° akmagmoheadstenma762195

Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Scala

Scala β€” это ΠΎΡ‡Π΅Π½ΡŒ совмСстимый язык, поэтому Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы Windows ΠΈ Unix.
Π’Π°ΠΊ ΠΊΠ°ΠΊ Scala ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ языки синтаксичСски, Π² Scala ΠΏΡ€ΠΎΡ‰Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ. Scala-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ написаны Π² любом тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠ½ΠΎΡ‚, notepad ++ ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π² этом Ρ€ΠΎΠ΄Π΅. МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ΠΎΠ²ΡƒΡŽ IDE для написания ΠΊΠΎΠ΄ΠΎΠ² Scala ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π΅ Π² своСй систСмС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эти ΠΊΠΎΠ΄Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ для написания, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ IDE ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятный Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°, ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ, компилятор ΠΈ Ρ‚. Π”.
Для Π½Π°Ρ‡Π°Π»Π°, написаниС ΠΊΠΎΠ΄ΠΎΠ² Scala ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Ρ€ΠΈΠ³ΡƒΡŽΡ‰ΠΈΡ… ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Scala Π² своСй систСмС. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, слСдуя ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΌ инструкциям, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π½ΠΈΠΆΠ΅:

ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. gonbanisrocourju939001. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ-gonbanisrocourju939001. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° gonbanisrocourju939001
Π’Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Как Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Scala?

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Hello World.

// Scala ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Hello World

def main(args : Array[String])

// ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π³ΠΈΠΊΠΈ!

println( «Hello, World!» )

Π’Ρ‹Ρ…ΠΎΠ΄:

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π΅ΡΡ‚ΡŒ Π΄Π²Π° способа запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Scala:

ΠžΡΠ½ΠΎΠ²Ρ‹ Scala

ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ β€” это просто мСсто хранСния. КаТдая пСрСмСнная извСстна ΠΏΠΎ своСму ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΈ Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ Scala Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ β€” это символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ. Π’ Scala ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ :

// Scala ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для дСмонстрации
// ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

12 Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… курсов ΠΏΠΎ Scala для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΡƒΠΆΠ΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚

Π―Π·Ρ‹ΠΊ программирования Scala Π³Ρ€ΠΎΠΌΠΊΠΎ заявил ΠΎ сСбС Π² 2010-Π΅ Π³ΠΎΠ΄Ρ‹. БСйчас Π°ΠΆΠΈΠΎΡ‚Π°ΠΆ Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π΅Π³ΠΎ спал, Π½ΠΎ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ Scala Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ стоит. Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых популярных коммСрчСских языков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Twitter, LinkedIn, WhatsApp. Scala-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ Ρ‚Π°ΠΊ вострСбованы ΠΊΠ°ΠΊ ΠΈΡ… ΠΊΠΎΠ»Π»Π΅Π³ΠΈ, ΠΏΠΈΡˆΡƒΡ‰ΠΈΠ΅ Π½Π° Python ΠΈΠ»ΠΈ Java, Π½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ спСциалист Π±ΡƒΠ΄Π΅Ρ‚ Ρ†Π΅Π½ΠΈΡ‚ΡŒΡΡ высоко, Π° Π·Π½Π°Π½ΠΈΠ΅ языка станСт бСзусловным плюсом Π² Ρ€Π΅Π·ΡŽΠΌΠ΅. Π’ ΠΏΠΎΠΌΠΎΡ‰ΡŒ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ряды Π°Π΄Π΅ΠΏΡ‚ΠΎΠ² Scala, Digitaldefynd составил (Π° ΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ) ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΡƒ ΠΎΠ½Π»Π°ΠΉΠ½-курсов ΠΈ Ρ‚Ρ€Π΅Π½ΠΈΠ½Π³ΠΎΠ² Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ слоТности.

Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. bfe89e8ea1c7e07fd56fdd83df10b578. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ-bfe89e8ea1c7e07fd56fdd83df10b578. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° bfe89e8ea1c7e07fd56fdd83df10b578

Π―Π·Ρ‹ΠΊ программирования Scala Π³Ρ€ΠΎΠΌΠΊΠΎ заявил ΠΎ сСбС Π² 2010-Π΅ Π³ΠΎΠ΄Ρ‹. БСйчас Π°ΠΆΠΈΠΎΡ‚Π°ΠΆ Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π΅Π³ΠΎ спал, Π½ΠΎ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΎ Scala Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ стоит. Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых популярных коммСрчСских языков, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Twitter, LinkedIn, WhatsApp. Scala-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ Ρ‚Π°ΠΊ вострСбованы ΠΊΠ°ΠΊ ΠΈΡ… ΠΊΠΎΠ»Π»Π΅Π³ΠΈ, ΠΏΠΈΡˆΡƒΡ‰ΠΈΠ΅ Π½Π° Python ΠΈΠ»ΠΈ Java, Π½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ спСциалист Π±ΡƒΠ΄Π΅Ρ‚ Ρ†Π΅Π½ΠΈΡ‚ΡŒΡΡ высоко, Π° Π·Π½Π°Π½ΠΈΠ΅ языка станСт бСзусловным плюсом Π² Ρ€Π΅Π·ΡŽΠΌΠ΅. Π’ ΠΏΠΎΠΌΠΎΡ‰ΡŒ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ряды Π°Π΄Π΅ΠΏΡ‚ΠΎΠ² Scala, Digitaldefynd составил (Π° ΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ) ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΡƒ ΠΎΠ½Π»Π°ΠΉΠ½-курсов ΠΈ Ρ‚Ρ€Π΅Π½ΠΈΠ½Π³ΠΎΠ² Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ слоТности.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅
spoiler#handleClick»>ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ

Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π° Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΈ носит ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€.

ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ скидки ΠΈ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½Π»Π°ΠΉΠ½-ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ ссылкС.

Apache Spark Π½Π° Scala для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (Udemy)

ΠšΡƒΡ€Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Apache Spark, ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ Π² области BigData. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ смысл ΠΈΠ· массивных Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² отказоустойчивом кластСрС Hadoop. ΠžΡΠ²ΠΎΠΈΡ‚Π΅ искусство формулирования ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ многочислСнных практичСских ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для выполнСния Π² слуТбах ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… вычислСний.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

spoiler#handleClick»>ΠžΡ‚Π·Ρ‹Π²

Β«Π­Ρ‚ΠΎ прСвосходный курс ΠΏΠΎ Spark ΠΈ Scala. Π― Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΠΈΠ΄Π΅Π» Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ срСди ΠΎΠ½Π»Π°ΠΉΠ½-курсов. Π― Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π΅Π³ΠΎ всСм, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ясноС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ Spark. Бпасибо Π·Π° прСкрасный курс».

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 9 часов.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³: 4.5 ΠΈΠ· 5.

Scala ΠΈ Spark для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ машинного обучСния (Udemy)

Π Π°Π±ΠΎΡ‚Π° со Spark ΠΈ Scala β€” вострСбованный Π½Π°Π²Ρ‹ΠΊ Π² ИВ-индустрии. Π­Ρ‚Π° сСртификация начинаСтся с ΠΊΡ€Π°Ρˆ-курса ΠΏΠΎ Scala ΠΈ Π΄Π°Π΅Ρ‚ ΠΎΠ±Π·ΠΎΡ€ экосистСмы Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Spark. Π’ Π½Π΅ΠΉ Π΅ΡΡ‚ΡŒ мноТСство возмоТностСй ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ практичСский ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Mlib, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ для Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Databricks ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ инструмСнтами. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ сСртификации Π²Ρ‹ смоТСтС с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ Π² Ρ€Π΅Π·ΡŽΠΌΠ΅.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

spoiler#handleClick»>ΠžΡ‚Π·Ρ‹Π²

Β«Π― ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π» Π΄Ρ€ΡƒΠ³ΠΈΠ΅ курсы Jose ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅. Π― познакомился с Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² Scala ΠΈ Spark Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… рСсурсах, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ курсы Udemy, ΠΈ Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ структурированный ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π». РСпутация Jose ΠΊΠ°ΠΊ прСподаватСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ всС шаг Π·Π° шагом, Π΄Π°Π»Π° ΠΌΠ½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° этот курс. МнС нравится, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ β€žΠŸΠΎΡ‡Π΅ΠΌΡƒβ€œ, Π° Π½Π΅ просто фокусируСтся Π½Π° Ρ‚ΠΎΠΌ β€žΠšΠ°ΠΊβ€œ. Π­Ρ‚ΠΎΡ‚ курс Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ связал для мСня всС Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎΒ».

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 10 часов.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³: 4.4 ΠΈΠ· 5.

Scala ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… (Udemy)

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ программирования Π½Π° любом языкС ΠΈ Π²Π°ΠΌ хочСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² список своих скилов Π΅Ρ‰Π΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° Scala, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° этот курс. ВсСго 15 часов Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΈ, ΠΏΠΎ словам инструктора, Π²Ρ‹ смоТСтС ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Scala Π² производствСнных срСдах ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ с нуля ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ прилоТСния Π½Π° этом языкС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят Π²Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚Π°ΠΊΠΈΠΌΠΈ инструмСнтами, ΠΊΠ°ΠΊ Spark, Akka ΠΈ Play.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 15.5 часов.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³: 4.6 ΠΈΠ· 5.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Π² Scala (Coursera)

Π’ этой комплСксной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ элСмСнты стиля Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования ΠΈ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Π°ΡˆΠΈΡ… повсСднСвных Π·Π°Π΄Π°Ρ‡. НачнСтС с создания ΠΏΡ€ΠΎΡ‡Π½ΠΎΠΉ основы для рассуТдСний ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Ρƒ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈ символичСскому ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡŽ выполнСния. Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ программирования Π½Π° Java, C#, C, C++, Python, Javascript ΠΈΠ»ΠΈ Ruby (ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°), Ρ‚ΠΎ Π²Ρ‹ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ Π½Π° этой сСртификации.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

spoiler#handleClick»>ΠžΡ‚Π·Ρ‹Π²

«По-настоящСму Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ объяснСниС инструктора. Π₯ΠΎΡ€ΠΎΡˆΠΈΠ΅ задания. Они Π΄Π°ΡŽΡ‚ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ прСдставлСниС ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. МнС ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅Β».

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 23 часа, ΠΏΠΎ 5 часов Π² нСдСлю.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³: 4.8 ΠΈΠ· 5.

Scala ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ (Udemy)

ΠšΡƒΡ€Ρ создан для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π·Π½Π°ΠΊΠΎΠΌΡ‹Ρ… со Scala, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ свои знания ΠΈ Π½Π°Π²Ρ‹ΠΊΠΈ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π΄Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ этого языка ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. На курсС ΠΎΡ‚ΠΎΠ±Ρ€Π°Π½Ρ‹ ΠΈ рассмотрСны самыС Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ Scala, ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π΄Π΅ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° критичСскиС части, Π° вся тСория ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½Π° дСмонстрациСй Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠΏΡ‹Ρ‚ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ слоТных ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… систСм, настройкС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… инструмСнтов ΠΈ создании своих собствСнных.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 14 часов.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³: 4.8 ΠΈΠ· 5.

БпСциализация ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Scala (Coursera)

Π­Ρ‚Π° спСциализация Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° для практичСского знакомства с популярным языком Scala, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Занятия Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с изучСния Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ ΠΈ ΠΈΡ… использования для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ пСрСходят ΠΊ объСдинСнию ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌ Π·Π°Π΄Π°Ρ‡Π°ΠΌ. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ эта ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈ распрСдСлСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. К ΠΊΠΎΠ½Ρ†Ρƒ обучСния Π²Ρ‹ смоТСтС эффСктивно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ знания Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 5 мСсяцСв, ΠΏΠΎ 5 часов Π² нСдСлю.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³: 4.7 ΠΈΠ· 5.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Spark Streaming ΠΈ Scala: ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠΌ (Udemy)

На этом курсС Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ практичСской Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Twitter Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, смодСлированными ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² доступа Apache ΠΈ Π΄Π°ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для обучСния ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ машинного обучСния. Π£Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ задания Spark ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚Π΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅, пСрСнося ΠΈΡ… Π² кластСр Hadoop ΠΈ запуская Π² производствСнной срСдС.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

spoiler#handleClick»>ΠžΡ‚Π·Ρ‹Π²

«ЀантастичСская структура, прСдупрСТдСния компилятора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ±ΠΈΡ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ ΠΊΠΎΠ³ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈ запускС ΠΊΠΎΠ΄Π°, ΠΈ ΠΏΠΎΠ±ΡƒΠ΄ΠΈΠ»ΠΈ мСня ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ Spark Streaming Π·Π° 20 ΠΌΠΈΠ½ΡƒΡ‚. Π‘ Π½Π΅Ρ‚Π΅Ρ€ΠΏΠ΅Π½ΠΈΠ΅ΠΌ ΠΆΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с оптимизациями ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ источниками ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈΒ».

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 6 часов.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³: 4.4 ΠΈΠ· 5.

Анализ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… со Scala ΠΈ Spark (Coursera)

Π­Ρ‚ΠΎΡ‚ курс ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ распространСна Π½Π° распрСдСлСнный случай с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Spark. Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ модСль программирования Spark ΠΈ ΠΏΠΎΠΉΠΌΠΈΡ‚Π΅, Ρ‡Π΅ΠΌ ΠΎΠ½Π° отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π·Π½Π°ΠΊΠΎΠΌΡ‹Ρ… Π²Π°ΠΌ. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ практичСский ΠΎΠΏΡ‹Ρ‚ ΠΈ выяснитС, ΠΊΠΎΠ³Π΄Π° стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ вопросы, связанныС с распрСдСлСниСм, ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π±ΠΎΠ»Π΅Π΅ эффСктивной. К ΠΊΠΎΠ½Ρ†Ρƒ занятий Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π² состоянии Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· постоянного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ, Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 28 часов.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³: 4.7 ΠΈΠ· 5.

Scala для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… (Udemy)

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ всСм, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ комплСксноС прСдставлСниС ΠΎΠ± языкС программирования Scala ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с нуля. ΠšΡƒΡ€Ρ прСдставляСт сбалансированноС ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Scala ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Actors ΠΈ Collections. Если Π²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»ΡŽ, Ρ‚ΠΎ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ обучСния, ΠΏΡ€ΠΈ условии выполнСния всСх Π·Π°Π΄Π°Π½ΠΈΠΉ, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‡Π½Ρ‹Π΅ тСорСтичСскиС знания ΠΈ практичСскиС Π½Π°Π²Ρ‹ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят Π²Π°ΠΌ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Scala ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для этого инструмСнты.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 5.5 часов.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³: 4.7 ΠΈΠ· 5.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Scala (Artima)

Если Π²Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΠ΅Ρ‚Π΅ΡΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π° Scala, Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ, Ρ‚ΠΎ это β€” подходящий Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ курсов, это руководство рассматриваСт Ρ‚Π΅ΠΌΡ‹ шаг Π·Π° шагом ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ студСнтам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ ΠΊΠ½ΠΈΠ³Π°ΠΌ. ΠšΡ€ΠΎΠΌΠ΅ основных Ρ‚Π΅ΠΌ, Π² Π½Π΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ рассказываСтся, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с XML, ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ с графичСским интСрфСйсом, равСнством ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π­Ρ‚ΠΎΡ‚ курс со мноТСством ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΠΊΠΎΠ΄ΠΎΠ² β€” Ρ„Π°Π²ΠΎΡ€ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: опрСдСляСтС сами.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³: 4.4 ΠΈΠ· 5.

Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ: бСсплатно.

Apache Spark 3: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Spark Π½Π° Scala для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… (Udemy)

Π­Ρ‚ΠΎΡ‚ курс Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ всСм ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Spark ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания для создания Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ со знакомства с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ Spark ΠΈ Π΅Π³ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ концСпциями, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚Π΅ ΠΊ Π±ΠΎΠ»Π΅Π΅ спСцифичСским Ρ‚Π΅ΠΌΠ°ΠΌ. ΠšΡƒΡ€Ρ основан Π½Π° рассмотрСнии ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ Β«ΠΆΠΈΠ²ΠΎΠΌΒ» ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, поэтому всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π² Π½Π΅ΠΌ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ. Для студСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят ΠΏΡ€ΠΎΠΉΡ‚ΠΈ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ знакомство со Scala.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 7 часов.

Π Π΅ΠΉΡ‚ΠΈΠ½Π³: 4.6 ΠΈΠ· 5.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΡΠΌΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Scala (Coursera)

Новый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ обучСния ΠΎΡ‚ Coursera β€” ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΡΠΌΠΈ β€” позволяСт Π² сТатыС сроки (Π΄ΠΎ 2-Ρ… часов) ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ основы Scala, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π² ΠΌΠΈΠ½ΠΈ-ΠΈΠ³Ρ€Ρƒ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° этом языкС, ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΡΡΡŒ Π² написании ΠΊΠΎΠ΄Π°. ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ экрана ΠΏΠΎΠ΄ руководством прСподаватСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Π΅ инструкции. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ студСнтам, хотя Π±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ со Scala, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ языком программирования. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ нСдоступСн для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ бСсплатного ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° курса

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 1.5 β€” 2 часа.

Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π²Π°ΠΆΠ½ΡƒΡŽ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ? ΠŸΠΈΡˆΠΈΡ‚Π΅ Π² Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌ-Π±ΠΎΡ‚.

А Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° наш Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π».

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ шаги Π² Scala


Авторы: Π‘ΠΈΠ»Π» ВСннСрс
ΠœΠ°Ρ€Ρ‚ΠΈΠ½ ΠžΠ΄Π΅Ρ€ΡΠΊΠΈ
ЛСкс Π‘ΠΏΡƒΠ½
ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄: ΠšΡƒΠΏΠ°Π΅Π² ΠœΠΈΡ…Π°ΠΈΠ»
Чистяков Π’Π»Π°Π΄
Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: First Steps to Scala
ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» прСдоставил: RSDN Magazine #2-2007

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ: 30.07.2007
Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ: 15.04.2009
ВСрсия тСкста: 1.0

Π‘ΠΊΠ°Π»Π° разрабатываСтся с 2003 Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠœΠ°Ρ€Ρ‚ΠΈΠ½Π° ΠžΠ΄Π΅Ρ€ΡΠΊΠΎΠ³ΠΎ (Martin Odersky) Π² EPFL, Π² Π›ΠΎΠ·Π°Π½Π½Π΅, ШвСйцария. Он участвовал Π² создании ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии generic-ΠΎΠ² Java ΠΈ Π±Ρ‹Π» Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ компилятора javac. Π Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ Scala ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ограничСния, Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ трСбованиями ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости с Java. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Scala – это Π½Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Java, Π½ΠΎ ΠΎΠ½Π° сохраняСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ взаимодСйствия с Java.

Одна ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, способных Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ вас ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Scala, состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Scala позволяСт ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Java, сохраняя ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ исполнСния JVM, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ инвСстиции Π² Java-ΠΊΠΎΠ΄, знания ΠΈ мноТСство API, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ для JVM. Scala ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΡΡ‚ΡŒΡŽ языков Ρ‚ΠΈΠΏΠ° Ruby ΠΈΠ»ΠΈ Python, Π½ΠΎ ΠΏΡ€ΠΈ этом статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°, ΠΊΠ°ΠΊ ΠΈ Java. Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Scala поставляСтся с Erlang-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Actors, которая сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ JVM.

По-ΠΈΡ‚Π°Π»ΡŒΡΠ½ΡΠΊΠΈ Scala ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «Π»Π΅ΡΡ‚Π½ΠΈΡ†Π°». Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ вас ΠΏΠΎ 12 ступСням, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π½Π°Π±Ρ€Π°Ρ‚ΡŒΡΡ Π·Π½Π°Π½ΠΈΠΉ Π² Scala. Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, провСряя ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ компилятора Scala. Π¨Π°Π³ 1 ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΊΠ°ΠΊ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ дистрибутив Scala.

Π¨Π°Π³ 1. Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΈ устанавливаСм Scala

Для исполнСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠ· этой ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Scala со страницы http://www.scala-lang.org/downloads/index.html. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ написаны для Scala 2.5.0-RC1, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡΠ²Π΅ΠΆΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Ρ‡Π΅ΠΌ 2.5.0-RC1. ПослС скачивания Π°Ρ€Ρ…ΠΈΠ²Π° создайтС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, с ΠΈΠΌΠ΅Π½Π΅ΠΌ scala), ΠΈ распакуйтС Π°Ρ€Ρ…ΠΈΠ² Π² этот пустой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. Π‘Ρ€Π΅Π΄ΠΈ создаваСмых ΠΏΡ€ΠΈ распаковкС ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ bin с исполняСмыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Scala, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ компилятор ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Для удобства использования Scala Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ bin Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ срСды PATH. ЕдинствСнноС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ – ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Java 1.4 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅, ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Java ΠΌΠΎΠΆΠ½ΠΎ с http://java.sun.com/. МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Scala Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Eclipse ΠΈ IntelliJ, Π½ΠΎ здСсь ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ дистрибутив Scala со scala-lang.org.

Π¨Π°Π³ 2. Учимся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Scala

Π‘Π°ΠΌΡ‹ΠΉ простой ΠΏΡƒΡ‚ΡŒ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со Scala – использованиС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Scala, ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ для написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Scala. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅, ΠΈ ΠΎΠ½ вычислит Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° Scala называСтся просто scala. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ½Π° Ρ‚Π°ΠΊ:

Если Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ Π½Π° Π²Π²ΠΎΠ΄:

Π­Ρ‚Π° строка Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

Π’ послСдних строках ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ unnamedX. НапримСр, Ссли Π΄ΠΎ этого unnamed0 Π±Ρ‹Π» установлСн Π² 3, unnamed0 * 3 Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ 9:

Π§Ρ‚ΠΎΠ±Ρ‹ вывСсти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅, Π½ΠΎ Π½Π΅ достаточноС привСтствиС Hello, world!, Π²Π²Π΅Π΄ΠΈΡ‚Π΅:

Π’ΠΈΠΏ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° здСсь – scala.Unit, Scala-Π°Π½Π°Π»ΠΎΠ³ void Π² Java. Главная Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Unit Π² Scala ΠΈ void Π² Java состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Scala позволяСт Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Unit, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ (), Π° Π² Java Π½Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° void. (Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΊΠ°ΠΊ 1, 2 ΠΈ 3 ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями Ρ‚ΠΈΠΏΠ° int Π² Scala ΠΈ Java, Ρ‚Π°ΠΊ () являСтся СдинствСнным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° Unit Π² Scala.) Π—Π° этим ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Unit ΠΈ void эквивалСнтны. Π’ частности, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ void ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Java отобраТаСтся Π½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Unit ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Scala.

Π¨Π°Π³ 3. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ значСния ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

Scala Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. ЗначСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова val, Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ – с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова var. Π’ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ значСния:

Π—Π΄Π΅ΡΡŒ вводится msg ΠΊΠ°ΠΊ имя для значСния «Hello world!». Π’ΠΈΠΏ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ значСния – java.lang.String, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ строки Scala – это Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ строки Java (Π½Π° самом Π΄Π΅Π»Π΅ всС Java-классы доступны Π² Scala).

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΡƒΡŽ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Scala: наслСдованиС Ρ‚ΠΈΠΏΠΎΠ². Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ значСния Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π½ΠΈ ΠΎ java.lang.String, Π½ΠΈ ΠΎ просто String. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Scala Π²Ρ‹Π²Π΅Π» Ρ‚ΠΈΠΏ значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΅ΠΌΡƒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ msg Π±Ρ‹Π»ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ «Hello, world!», ΠΈ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΈΠΏ «Hello, world!» – java.lang.String, компилятор присваиваСт msg Ρ‚ΠΈΠΏ java.lang.String.

Если ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ (ΠΈΠ»ΠΈ компилятор) ΠΌΠΎΠΆΠ΅Ρ‚ вывСсти Ρ‚ΠΈΠΏ, Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Ρ‡Π΅ΠΌ Π·Π°Π±ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ явными указаниями Ρ‚ΠΈΠΏΠΎΠ². Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ явно, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. (НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ public-Ρ‡Π»Π΅Π½ΠΎΠ² классов Π² цСлях докумСнтирования.) Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Java, Π³Π΄Π΅ Π²Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π² Scala Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ значСния указываСтся послС ΠΈΠΌΠ΅Π½ΠΈ, ΠΎΡ‚Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ. НапримСр:

Или, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ java.lang Π²ΠΈΠ΄Π½Ρ‹ со своими простыми ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² Scala-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, просто:

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ исходному msg, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ msg:

Π§Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с msg, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π½Π΅ пСрСмСнная – ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. НапримСр, посмотритС, ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Если Π²Π°ΠΌ трСбуСтся ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²Π°ΠΌ придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΊΠ°ΠΊ Π²:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ greeting – это пСрСмСнная (опрСдСлСнная Ρ‡Π΅Ρ€Π΅Π· var), Π° Π½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Ρ‡Π΅Ρ€Π΅Π· val), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·ΠΆΠ΅. Если Ρƒ вас испортится настроСниС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ greeting Π½Π°:

Π¨Π°Π³ 4. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π² с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ значСниями Scala, Π²Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄-Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это дСлаСтся Π² Scala:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π½Π΅ с val ΠΈΠ»ΠΈ var, Π° с def. Π—Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС max, ΠΈΠ΄Π΅Ρ‚ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках. Π—Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°, прСдваряСмоС Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊ принято Π² Scala, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ компилятор Scala (ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠΆΠ΅, Π½ΠΎ для простоты дальшС Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΠ±ΠΎΠΈΡ… компилятором) Π½Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ max ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, x ΠΈ y, ΠΎΠ±Π° Ρ‚ΠΈΠΏΠ° int. Π—Π° Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобкой списка ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° max Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° β€œ: Int”. Оно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСия ΠΌΠ΅Ρ‚ΠΎΠ΄Π° max.

Иногда компилятор Scala ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ вас ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Если ΠΌΠ΅Ρ‚ΠΎΠ΄ рСкурсивСн, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π’ случаС max Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, компилятор Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π΅Π³ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ΅Ρ‚ΠΎΠ΄ max ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ:

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ всСгда явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ.

Имя, список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ, Ссли ΠΎΠ½ ΡƒΠΊΠ°Π·Π°Π½, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ сигнатуру ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ВслСд Π·Π° сигнатурой ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ΄Π΅Ρ‚ Π·Π½Π°ΠΊ равСнства, Π° Π·Π° Π½ΠΈΠΌ – Ρ‚Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° max состоит всСго ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ выраТСния, Π΅Π³ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, Π½ΠΎ Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ – ΠΌΠΎΠΆΠ½ΠΎ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Если Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° нСсколько Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ:

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠ°ΠΊ Π²:

Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ со скобками, Ρ‚Π°ΠΊ ΠΈ Π±Π΅Π· Π½ΠΈΡ…:

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡΡ‚ΠΈΠ»ΡŽ для Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° состоят Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты (говорят, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт, Ссли ΠΎΠ½ измСняСт состояниС Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°), скобки Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π»ΠΈ ΠΈΡ… компилятор. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ greet ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ стандартный Π²Ρ‹Π²ΠΎΠ΄, Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты ΠΈ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ со скобками, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ программистов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄.

Π¨Π°Π³ 5: ПишСм скрипты Π½Π° Scala

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Scala ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΏΠΈΡˆΡƒΡ‰ΠΈΡ… большиС систСмы, ΠΎΠ½Π° Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π²Π½ΠΈΠ·, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ СстСствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ для создания скриптов. Π‘ΠΊΡ€ΠΈΠΏΡ‚ – это просто ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ (кстати, Ссли Ρƒ вас всС Π΅Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Scala, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ :quit). ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Π² Ρ„Π°ΠΉΠ» hello.scala ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ привСтствиС:

АргумСнты ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для Scala-скрипта вводятся Ρ‡Π΅Ρ€Π΅Π· Scala-массив args. Π’ Scala, ΠΊΠ°ΠΊ ΠΈ Π² Java, нумСрация индСксов массива начинаСтся с нуля, Π½ΠΎ ΠΊ элСмСнту Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ, указывая индСкс Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ…, Π° Π½Π΅ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² Scala-массивС steps – это steps(0), Π° Π½Π΅ steps[0]. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π² Π½ΠΎΠ²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ helloarg.scala:

Π’ этой ΠΊΠΎΠΌΠ°Π½Π΄Π΅ «planet» пСрСдаСтся ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ скрипт обращаСтся ΠΊΠ°ΠΊ ΠΊ args(0). Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅:

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ этот скрипт содСрТит ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ. Как ΠΈ Π² Java, компилятор Scala ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ символы ΠΎΡ‚ // Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΡŽΠ±Ρ‹Π΅ символы ΠΌΠ΅ΠΆΠ΄Ρƒ /* ΠΈ */. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ строк с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° +. ВсС это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΈ оТидалось. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ «Hello, » + «world!» выдаст строку «Hello, world!».

ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΏΠΎΠ΄ Unix ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Scala-скрипты ΠΊΠ°ΠΊ скрипты ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, Ссли Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Π°ΠΉΠ»Π΅ helloarg:

#!/bin/sh Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ самой ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкой Ρ„Π°ΠΉΠ»Π°. ПослС задания Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° исполнСниС:

Π²Ρ‹ смоТСтС Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Scala-скрипты ΠΊΠ°ΠΊ скрипты ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, просто сказав:

Π¨Π°Π³ 6. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ while ΠΈ if

Π¦ΠΈΠΊΠ»Ρ‹ while Π² Scala ΠΏΠΈΡˆΡƒΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² Java. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ while, ввСдя Π² Ρ„Π°ΠΉΠ» printargs.scala ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π­Ρ‚ΠΎΡ‚ скрипт начинаСтся с опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ var i = 0. Π’Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² присвоит i Ρ‚ΠΈΠΏ Scala.Int, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Ρ‚ΠΈΠΏ Π΅Π΅ исходного значСния, 0. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ while Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΡŽ исполнСния Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π±ΡƒΠ»Π΅Π²ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ i
Рисунок 1. Бинтаксис Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Scala.

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒΡΡ вопросом, Ρ‡Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ с Ρ‚Π΅ΠΌΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌΠΈ Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… языках Ρ‚ΠΈΠΏΠ° Java. Π§Ρ‚ΠΎΠ±Ρ‹ вСсти программиста Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, Π² Scala доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ родствСнник ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ for (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ for comprehension). Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²Ρ‹ Π½Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΡ… Π²ΠΎ всСм блСскС, Π½ΠΎ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Π°ΠΌ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ. Π’ Π½ΠΎΠ²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ forprintargs.scala Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΎΡ‡Π΅Π½ΡŒ полСзная упорядочСнная коллСкция – это ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, tuple. Как ΠΈ List, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ нСизмСняСмы, Π½ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ List, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ элСмСнты Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли список ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ List[Int] ΠΈΠ»ΠΈ List[String], ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈ Int, ΠΈ String ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Если Π² Java Π²Ρ‹ часто создаСтС JavaBean-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ классы для хранСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ Π² Scala Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ. И это просто: Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ для хранСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², просто Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² скобки, Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ² ΠΈΡ… запятыми. Π‘ΠΎΠ·Π΄Π°Π² экзСмпляр ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π΅Π³ΠΎ элСмСнтам ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ, ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΡΡ с Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ индСкс элСмСнта. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΠΊΠΎΠ΄ для Ρ„Π°ΠΉΠ»Π° luftballons.scala:

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС этого ΠΊΠΎΠ΄Π° Π²Ρ‹ создаСтС Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Int со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 99 Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта, ΠΈ String со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ «Luftballons» Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта. Scala Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΈΠΏ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΊΠ°ΠΊ Tuple2[Int, String], ΠΈ Π΄Π°Π΅Ρ‚ этот Ρ‚ΠΈΠΏ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ pair. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС происходит ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ полю _1, Ρ‡Ρ‚ΠΎ даст ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, 99. Π’ΠΎΡ‡ΠΊΠ° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строкС – это Ρ‚Π° ΠΆΠ΅ Ρ‚ΠΎΡ‡ΠΊΠ°, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ полю ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π²Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ ΠΊ полю _1. Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ это скрипт, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅:

Π¨Π°Π³ 10. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Set ΠΈ Map

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Scala Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‚Π°ΠΊ ΠΈ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ стили, Π² Π΅Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ дСлаСтся ΡƒΠΏΠΎΡ€ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ измСняСмых ΠΈ нСизмСняСмых классов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. НапримСр, Array всСгда измСняСмы, Π° List всСгда Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹. Когда Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ Set ΠΈ Map, Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт измСняСмыС ΠΈ нСизмСняСмыС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡƒΡ‚Π΅ΠΌ. Для Set ΠΈ Map Scala ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов.

НапримСр, Scala API содСрТит Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ trait для Set, Π³Π΄Π΅ trait ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Java-интСрфСйс (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом Π±ΡƒΠ΄Π΅Ρ‚ сказано Π½Π° шагС 12). Scala прСдоставляСт Π΄Π²Π° суб-trait-Π°, ΠΎΠ΄ΠΈΠ½ для измСняСмых Set, Π΄Ρ€ΡƒΠ³ΠΎΠΉ – для нСизмСняСмых. Как ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° рисункС 2, всС Ρ‚Ρ€ΠΈ trait-Π° Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΎ простоС имя Set. Π˜Ρ… ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΠΎΠ½ΠΈ находятся Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ классы Set Π² Scala API, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½Π° рисункС 2 классы HashSet, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ измСняСмыС Π»ΠΈΠ±ΠΎ нСизмСняСмыС trait-Ρ‹ Set (Ρ‚Π°ΠΌ Π³Π΄Π΅ Π² Java Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ интСрфСйсы, Π² Scala Π²Ρ‹ «Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚Π΅» trait-Ρ‹). Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Π²Π°ΠΌ захочСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ HashSet, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ измСняСмым ΠΈ нСизмСняСмым Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ, Π² зависимости ΠΎΡ‚ потрСбностСй.

Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. 2. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ-2. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 2
Рисунок 2. Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ классов для Set Π² Scala.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ‹Ρ‚Π°Ρ‚ΡŒ Set Π² Scala, Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»Π΅ jetset.scala:

ΠŸΠ΅Ρ€Π²Π°Ρ строка jetSet.scala ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ измСняСмый HashSet. Как ΠΈ Π² Java, ΠΈΠΌΠΏΠΎΡ€Ρ‚ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² исходном ΠΊΠΎΠ΄Π΅ простоС имя класса, HashSet. ПослС пустой строки, Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ строкС создаСтся Π½ΠΎΠ²Ρ‹ΠΉ HashSet, содСрТащий Ρ‚ΠΎΠ»ΡŒΠΊΠΎ элСмСнты Ρ‚ΠΈΠΏΠ° String, ΠΈ хранящий Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ссылку Π² jetSet. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈ Π² случаС List ΠΈ Array, ΠΏΡ€ΠΈ создании Set Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠΌ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС String), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Set Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ. Π”Π²Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Ρ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² измСняСмый Set с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° +=. Как ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… символов, ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² Scala, Π½Π° самом Π΄Π΅Π»Π΅ это ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² классС HashSet. Если Π±Ρ‹ Π²Π°ΠΌ Π·Π°Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ, вмСсто jetSet += «Lear», ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ jetSet.+=(«Lear»). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ += ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НапримСр, jetSet += «Lear» добавляСт Π² HashSet ΠΎΠ΄ΠΈΠ½ элСмСнт Ρ‚ΠΈΠΏΠ° String, Π° jetSet += («Boeing», «Airbus») – Π΄Π²Π°. НаконСц, послСдняя строка Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚, содСрТит Π»ΠΈ Set ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ строку (ΠΊΠ°ΠΊ ΠΈ оТидалось, ΠΎΠ½Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ false).

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ класс ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π² Scala – Map. Как ΠΈ Π² случаС Set, Scala прСдоставляСт ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ вСрсии Map, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ классов. Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС 3, иСрархия классов для Map ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ для Set. Π•ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ trait Map Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ scala.collection, ΠΈ Π΄Π²Π° суб- trait-Π° Map: измСняСмый Map Π² scala.collection.mutable ΠΈ нСизмСняСмый – Π² scala.collection.immutable.

Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. 3. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ-3. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Scala с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 3
Рисунок 3. Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ классов для Map Π² Scala.

Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Map, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ HashMap, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов Π½Π° рисункС 3, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ измСняСмый ΠΈΠ»ΠΈ нСизмСняСмый trait. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Map Π² дСйствии, создайтС Ρ„Π°ΠΉΠ» treasure.scala со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ map – это ΠΎΡ‡Π΅Π½ΡŒ полСзная конструкция Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Scala прСдоставляСт для Map Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎ Π΄ΡƒΡ…Ρƒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² шагС 9 ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ List Π±Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова new. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π² дСйствии этот ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ способ создания map, создайтС Ρ„Π°ΠΉΠ» numerals.scala со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:

Π’ numerals.scala Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ trait нСизмСняСмого Map автоматичСски импортируСтся Π² любой исходный ΠΊΠΎΠ΄ Scala. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Map Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΊΠΎΠ΄Π°, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Scala Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ scala.collection.immutable.Map. Π’ этой строкС Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-синглтона нСизмСняСмого Map, пСрСдавая Π΅ΠΌΡƒ ΠΏΡΡ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π­Ρ‚ΠΎΡ‚ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ экзСмпляр нСизмСняСмого HashMap, содСрТащий ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Имя Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – apply, Π½ΠΎ, ΠΊΠ°ΠΊ упомянуто Π² шагС 8, Ссли Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Map(. ), это Π±ΡƒΠ΄Π΅Ρ‚ трансформировано компилятором Π² Map.apply(. ). Если Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ скрипт numerals.scala, ΠΎΠ½ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ IV.

Π¨Π°Π³ 11. ПониманиС классов ΠΈ синглтон-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π”ΠΎ сих ΠΏΠΎΡ€ Π²Ρ‹ писали Scala-скрипты, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, прСдставлСнныС Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. Но Π²Π΅Π·Π΄Π΅, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π²Ρ‹, скорСС всСго, Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ прилоТСния Π½Π° классы. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ, создайтС Ρ„Π°ΠΉΠ» greetSimply.scala со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:

На самом Π΄Π΅Π»Π΅ greetSimply.scala – это Scala-скрипт, Π½ΠΎ ΠΎΠ½ содСрТит ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса. Однако этот ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Scala, ΠΊΠ°ΠΊ ΠΈ Π² Java, классы ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Поля ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ val ΠΈΠ»ΠΈ var. Methods ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· def. НапримСр, Π² классС SimpleGreeter, greeting – это ΠΏΠΎΠ»Π΅, Π° greet – это ΠΌΠ΅Ρ‚ΠΎΠ΄. Для использования этого класса Π²Ρ‹ создаСтС Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр с new SimpleGreeter, ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ ссылку Π½Π° этот экзСмпляр Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ g. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ экзСмплярный ΠΌΠ΅Ρ‚ΠΎΠ΄ greet для g. ΠŸΡ€ΠΈ запускС этого скрипта Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ потрясСны Π²ΠΈΠ΄ΠΎΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ Hello, world!.

Π₯отя классы Π² Scala Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Java, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ… ΠΎΠ½ΠΈ силно Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. Одно ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Java ΠΈ Scala касаСтся конструкторов. Π’ Java Ρƒ классов Π΅ΡΡ‚ΡŒ конструкторы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² Scala классы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Нотация Scala ΠΊΠΎΡ€ΠΎΡ‡Π΅ – ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ классов ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Ρ‚Π΅Π»Π΅ классов, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ поля ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ присвоСния, ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ конструктора Π² поля. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ экономию, особСнно Π² ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… классах. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ это Π² дСйствии, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ» greetFancily.scala:

ВмСсто опрСдСлСния конструктора, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ String, ΠΊΠ°ΠΊ это дСлаСтся Π² Java, Π² greetFancily.scala, Π²Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ greeting этого конструктора Π² скобках сразу Π·Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ самого класса, ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок Ρ‚Π΅Π»Π° класса FancyGreeter. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΈΠΌ способом greeting Π² сущности становится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ (Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ – Π΅Π³ΠΎ нСльзя ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ) поля, доступным Π²Π΅Π·Π΄Π΅ Π² Ρ‚Π΅Π»Π΅ класса. РСально Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ println Π² Ρ‚Π΅Π»Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° greet. Если Π²Ρ‹ запуститС этот скрипт ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ scala greetFancily.scala, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π²ΠΎΠΎΠ΄ΡƒΡˆΠ΅Π²Π»ΡΡŽΡ‰Π΅Π΅:

Π­Ρ‚ΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎ, Π½ΠΎ Ρ‡Ρ‚ΠΎ, Ссли Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ строку, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌΡƒ конструктору FancyGreeter, Π½Π° null, ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ NullPointerException? К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π›ΡŽΠ±ΠΎΠΉ ΠΊΠΎΠ΄, находящийся Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° класса Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня (Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠ΅ само ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса) ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, компилируСтся Π² Ρ‚Π΅Π»ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ конструктора. Π’ сущности, ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ конструктор Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ final-ΠΏΠΎΠ»Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° конструктора (Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ класса). НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π° null, создайтС класс greetCarefully.scala со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:

Π’ greetCarefully.scala Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ if находится Π² сСрСдинС Ρ‚Π΅Π»Π° класса, Ρ‡Ρ‚ΠΎ Π² Java Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Scala ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ это if Π² Ρ‚Π΅Π»ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ конструктора, сразу послС ΠΊΠΎΠ΄Π°, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ поля. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π²Π½ΡƒΡ‚Ρ€ΡŒ Π² ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΌ конструкторС null, ΠΊΠ°ΠΊ Π² послСднСй строкС скрипта greetCarefully.scala, ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ конструктор спСрва ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ null ΠΏΠΎΠ»Π΅ greeting. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ if, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΡ… равСнство null поля greeting, ΠΈ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊ ΠΎΠ½ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ, выдаст NullPointerException. Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ greetCarefully.scala, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NullPointerException.

Π’ Java Π²Ρ‹ ΠΈΠ½ΠΎΠ³Π΄Π° Π·Π°Π΄Π°Π΅Ρ‚Π΅ классам нСсколько конструкторов с ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ списками ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π² Scala, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΈΡ… ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ конструктором, ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ этого конструктора нСпосрСдствСнно Π·Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ класса. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π»ΡŽΠ±Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ конструкторы Π² Ρ‚Π΅Π»ΠΎ класса ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ this. Π’ΠΎΡ‚ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ это ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» greetRepeatedly.scala:

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ конструктор RepeatGreeter ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строковый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ greeting, Π½ΠΎ ΠΈ цСлочислСнный счСтчик числа Ρ€Π°Π· Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ² привСтствия. Однако RepeatGreeter содСрТит ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ конструктора, ΠΌΠ΅Ρ‚ΠΎΠ΄Π° this, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ строковый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ greeting. Π’Π΅Π»ΠΎ этого конструктора состоит ΠΈΠ· СдинствСнного выраТСния: Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ конструктора, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ greeting ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ счСтчика 1. ПослСдниС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ строки скрипта greetRepeatedly.scala ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π΄Π²Π° экзСмпляра RepeatGreeter, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ конструктора, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ greet. Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ greetRepeatedly.scala, ΠΎΠ½ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚:

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Scala ΠΎΡ‚ Java состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Scala-классах Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ статичСских ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ВмСсто этого Scala позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ singleton-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова object. Singleton-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСльзя, Π΄Π° ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ new. Π’ сущности ΠΎΠ½ автоматичСски создаСтся ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ использовании, ΠΈ ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· слова β€œsingleton”, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС. Singleton-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ имя, Ρ‡Ρ‚ΠΎ ΠΈ класс. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Scala трансформируСт поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ singleton-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² статичСскиС поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Java-класса. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» WorldlyGreeter.scala со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:

Π’ этом Ρ„Π°ΠΉΠ»Π΅ Π²Ρ‹ опрСдСляСтС класс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class, ΠΈ singleton-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова object. Оба Ρ‚ΠΈΠΏΠ° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ WorldlyGreeter. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Java-программиста это ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π»ΡŽΠ±Ρ‹Π΅ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Java Π²Ρ‹ помСстили Π±Ρ‹ Π² класс WorldlyGreeter, Π² Scala Π²Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π² singleton-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ WorldlyGreeter. На самом Π΄Π΅Π»Π΅, ΠΊΠΎΠ³Π΄Π° компилятор Scala создаСт Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ для этого Ρ„Π°ΠΉΠ»Π°, ΠΎΠ½ создаСт Java-класс WorldlyGreeter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит экзСмплярный ΠΌΠ΅Ρ‚ΠΎΠ΄ greet (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² классС WorldlyGreeter Π² исходном ΠΊΠΎΠ΄Π΅ Scala) ΠΈ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ worldify (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² singleton-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ WorldlyGreeter). Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° greet класса WorldlyGreeter вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ worldify singleton-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса, ΠΏΠΎΡ…ΠΎΠΆΠ΅Π³ΠΎ Π½Π° способ Π²Ρ‹Π·ΠΎΠ²Π° статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Java: имя singleton-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈ имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄, придСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» WorldlyApp.scala со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:

Ни WorldlyGreeter.scala, Π½ΠΈ WorldlyApp.scala Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ скриптами, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠ½Ρ‡Π°ΡŽΡ‚ΡΡ опрСдСлСниями. Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠ°ΠΊ скрипт, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Scala поТалуСтся, Ρ‡Ρ‚ΠΎ WorldlyGreeter.scala Π½Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ВмСсто этого Π²Π°ΠΌ потрСбуСтся ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти Ρ„Π°ΠΉΠ»Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ компилятора Scala, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠ΅ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ классов. Один ΠΈΠ· способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ scalac, основного компилятора Scala. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Π²Π΅Π΄ΠΈΡ‚Π΅:

Учитывая, Ρ‡Ρ‚ΠΎ компилятор scalac запускаСт Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр JVM ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅, ΠΈ Ρ‡Ρ‚ΠΎ JVM часто ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚Π½ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ запуска, дистрибутив Scala Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ daemon-компилятор Scala ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ fsc (быстрый компилятор Scala). Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊ:

ЀактичСский ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ scala ΠΏΡ€ΠΈ «ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ» исходного Ρ„Π°ΠΉΠ»Π° Scala, состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ исходный тСкст Scala компилируСтся Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ Π² памяти, загруТаСтся Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ класса, ΠΈ исполняСтся.

Аналогично Java, любой Scala-класс с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ main, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° Array[String] ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌ Unit, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π° прилоТСния.

Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π½Π° шагС 2, Unit Π² Scala Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ void Π² Java. Если Π² Java ΠΌΠ΅Ρ‚ΠΎΠ΄ main Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ void, Π² Scala ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Unit.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρƒ WorldlyApp Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ main с подходящСй сигнатурой, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

ПослС Ρ‡Π΅Π³ΠΎ Π²Ρ‹, ΠΊ Π³Π»ΡƒΠ±ΠΎΡ‡Π°ΠΉΡˆΠ΅ΠΌΡƒ своСму ΠΈΠ·ΡƒΠΌΠ»Π΅Π½ΠΈΡŽ, ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅:

Π’Ρ‹ ΡƒΠΆΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π½ΡŒΡˆΠ΅, Π½ΠΎ Π² этот Ρ€Π°Π· ΠΎΠ½ Π±Ρ‹Π» сгСнСрирован Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Шаг 12. ПониманиС trait-ов и mixin-ов

Как Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² шагС 10, Scala Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ trait, ΠΏΠΎ Π΄ΡƒΡ…Ρƒ ΠΏΠΎΡ…ΠΎΠΆΡƒΡŽ Π½Π° интСрфСйсы Java. Одно ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ интСрфСйсами Java ΠΈ trait-Π°ΠΌΠΈ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Java-интСрфСйсах ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ абстрактны, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ trait-ΠΎΠ² Scala ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π΅Π»Π° с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ написан ΠΌΠ΅Ρ‚ΠΎΠ΄, ΡΡƒΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ trait-Ρ‹ Π² Scala ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ интСрфСйсами Π² Java ΠΈ trait-Π°ΠΌΠΈ Π² Scala – интСрфСйсы Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅, Π° trait-Ρ‹ – Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚Π΅. НСсмотря Π½Π° эту Ρ€Π°Π·Π½ΠΈΡ†Ρƒ (implements/extends), наслСдованиС ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² Scala Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Java. И Π² Java, ΠΈ Π² Scala класс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ (ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½) Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс. Π’ Java интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ноль ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ интСрфСйсов. Аналогично ΠΈ Π² Scala, trait ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ноль ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ trait-ΠΎΠ². Π’ Java класс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько интСрфСйсов. Аналогично Π² Scala класс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ нСсколько trait-ΠΎΠ². ΠšΡΡ‚Π°Ρ‚ΠΈ, implements Π½Π΅ являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом Π² Scala.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ класс Dog Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ trait Friendly. Π­Ρ‚ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ наслСдования ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ рСализация интСрфСйса Π² Java. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ссылку Π½Π° экзСмпляр Dog Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° Friendly. НапримСр:

Когда Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ greet для ссылки Friendly pet, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ динамичСскоС связываниС, ΠΊΠ°ΠΊ ΠΈ Π² Java, для опрСдСлСния, какая рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС класс Dog пСрСопрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ greet, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° рСализация greet ΠΈΠ· Dog. ΠŸΡ€ΠΈ исполнСнии этого ΠΊΠΎΠ΄Π° Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Woof (рСализация greet Π² Dog), Π° Π½Π΅ Hi (рСализация greet Π² Friendly). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Java состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Scala Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ def Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ override. Если ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π΅ ΡƒΠΊΠ°Π·Π°Π² override, Scala-ΠΊΠΎΠ΄ Π½Π΅ скомпилируСтся.

НаконСц, сущСствСнноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ интСрфСйсами Java ΠΈ trait-Π°ΠΌΠΈ Scala состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Scala Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ trait-Ρ‹ Π²ΠΎ врСмя создания экзСмпляра. Рассмотрим, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ trait:

Trait ExclamatoryGreeter Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ trait Friendly ΠΈ пСрСопрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ greet. ΠœΠ΅Ρ‚ΠΎΠ΄ greet ΠΈΠ· ExclamatoryGreeter спСрва Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ greet супСркласса, присоСдиняСт Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ greet, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ строку. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ этого trait-Π° Π²ΠΎ врСмя создания экзСмпляра, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово with. НапримСр:

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΊΠΎΠ΄Π° компилятор Scala создаст синтСтичСский Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ класс Dog ΠΈ trait ExclamatoryGreeter, ΠΈ создаст Π΅Π³ΠΎ экзСмпляр (синтСтичСский Ρ‚ΠΈΠΏ гСнСрируСтся автоматичСски компилятором, Π° Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ программистом). ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° синтСтичСского Ρ‚ΠΈΠΏΠ° это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈ запускС этот ΠΊΠΎΠ΄ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ «Woof!». Бсылка Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр синтСтичСского Ρ‚ΠΈΠΏΠ° Π±ΡƒΠ΄Π΅Ρ‚ присвоСна Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ pup. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ссли Π±Ρ‹ Ρ‚ΠΈΠΏ pup Π½Π΅ Π±Ρ‹Π» явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ Friendly, компилятор Scala Π²Ρ‹Π²Π΅Π» Π±Ρ‹ Ρ‚ΠΈΠΏ pup ΠΊΠ°ΠΊ Dog with ExclamatoryGreeter.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ, создайтС Ρ„Π°ΠΉΠ» friendly.scala со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:

ΠŸΡ€ΠΈ исполнСнии скрипт friendly.scala Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚:

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡƒΠ»ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· этой ΡΡ‚Π°Ρ‚ΡŒΠΈ, Scala ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Ρ€ΡƒΠ΄Π° программиста ΠΏΡ€ΠΈ сохранСнии инвСстиций. ЛСТащая Π² основС Scala ΠΊΡ€Π°Ρ‚ΠΊΠΎΡΡ‚ΡŒ синтаксиса ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ стиля программирования ΠΎΠ±Π΅Ρ‰Π°ΡŽΡ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ программирования ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Java, Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя позволяя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Java-ΠΊΠΎΠ΄ Scala-ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Java-ΠΊΠΎΠ΄Π°, мноТСством API, доступных Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Java, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ JVM ΠΈ собствСнными знаниями Java.

Благодаря знаниям, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ· этой ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ способны Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Scala для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, скриптов. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Π΅ здСсь Ρ‚Π΅ΠΌΡ‹ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π΅Π΅, ΠΈ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… здСсь Π΄Π°ΠΆΠ΅ Π½Π΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *