Π’Π΅Ρ€ΠΌΡ‹ ΠΈ Ρ‚ΠΈΠΏΡ‹

π•­π–Šπ–Žπ–…π–Šπ–—π–”

REPL

REPL (ΠΎΡ‚ Π°Π½Π³Π». read-eval-print loop β€” Ρ†ΠΈΠΊΠ» Β«Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ β€” вычислСниС β€” Π²Ρ‹Π²ΠΎΠ΄Β») β€” Ρ„ΠΎΡ€ΠΌΠ° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ простой ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ срСды программирования Π² Ρ€Π°ΠΌΠΊΠ°Ρ… срСдств интСрфСйса ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

Scala Worksheet

IntelliJ IDEA позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Scala worksheet ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Scala ΠΊΠΎΠ΄ Π½Π° Π»Π΅Ρ‚Ρƒ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строчки.

ЀактичСски Scala worksheet прСдставляСт ΠΈΠ· сСбя ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ графичСский интСрфСйс для REPL’а Scala.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык программирования содСрТит:

  • ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ выраТСния ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ элСмСнты ;
  • способы комбинирования Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ;
  • способы для абстрагирования Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ имя для выраТСния ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π° Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ.

ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ выраТСния

Code Result
1 res0: Int = 1
true res1: Boolean = true
β€œHello, scala!” res2: String = Hello, Scala!

Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Π‘ΠΎΠ»Π΅Π΅ комплСксныС выраТСния ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ комбинируя Π±ΠΎΠ»Π΅Π΅ простыС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

Code Result
1 + 2 res3: Int = 3
β€œHello,” ++ β€œScala!” res4: String = Hello, Scala!

ВычислСниС

НС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ выраТСния Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

  • БСрётся самый Π»Π΅Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€
  • Π’Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ (сначала Π»Π΅Π²Ρ‹ΠΉ, ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€Π°Π²Ρ‹ΠΉ)
  • ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ примСняСтся ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌ
  • ΠŸΡ€ΠΎΡ†Π΅ΡΡ вычислСния останавливаСтся ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ вычислСния арифмСтичСского выраТСния:

Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ создания комплСксных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· простых Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ это Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρƒ выраТСния:

Code Result
β€œHello, Scala!”.size res5: Int = 13
-42.abs res6: Int = 42
1.to(10) res7: InclusiveΒΉ = Range 1 to 10

ΒΉscala.collection.immutable.Range.Inclusive

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ это ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

На самом Π΄Π΅Π»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ это ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ:

Π˜Π½Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ синтаксис позволяСт ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈ скобки.

Π˜Π½Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ синтаксис Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

Π›ΡŽΠ±ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записан ΠΊΠ°ΠΊ инфиксный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.

ЗначСния ΠΈ Ρ‚ΠΈΠΏΡ‹

ВыраТСния ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Ρ‚ΠΈΠΏ. Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ модСль опрСдСляСт ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния. Π’ΠΈΠΏΡ‹ ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ значСния

0 ΠΈ 1 числа, ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠΌ являСтся Int.

"foo" ΠΈ "bar" это тСкст, ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠΌ являСтся String.

БтатичСская типизация

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Scala статичСски(Π²ΠΎ врСмя компиляции) провСряСт Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ нСсовмСстимыС выраТСния.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π² Scala Worksheet ввСсти ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ:

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹

  • Int: 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа (e.g. 1, 23, 456)
  • Double: 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (e.g. 1.0, 2.3, 4.56)
  • Boolean: Π±ΡƒΠ»Π΅Π²Ρ‹Π΅(логичСскиС) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (true ΠΈ false)
  • String: тСкст (e.g. β€œfoo”, β€œbar”)

УпраТнСния

Code Result
16.toHexString ?
(0 to 10).contains(10) ?
(0 until 10).contains(10) ?
β€œfoo”.drop(1) ?
β€œbar”.take(2) ?

УпраТнСния

Code Result
16.toHexString res8: String = 10
(0 to 10).contains(10) ?
(0 until 10).contains(10) ?
β€œfoo”.drop(1) ?
β€œbar”.take(2) ?

УпраТнСния

Code Result
16.toHexString res8: String = 10
(0 to 10).contains(10) res9: Boolean = true
(0 until 10).contains(10) ?
β€œfoo”.drop(1) ?
β€œbar”.take(2) ?

УпраТнСния

Code Result
16.toHexString res8: String = 10
(0 to 10).contains(10) res9: Boolean = true
(0 until 10).contains(10) res10: Boolean = false
β€œfoo”.drop(1) ?
β€œbar”.take(2) ?

УпраТнСния

Code Result
16.toHexString res8: String = 10
(0 to 10).contains(10) res9: Boolean = true
(0 until 10).contains(10) res10: Boolean = false
β€œfoo”.drop(1) res11: String = oo
β€œbar”.take(2) ?

УпраТнСния

Code Result
16.toHexString res8: String = 10
(0 to 10).contains(10) res9: Boolean = true
(0 until 10).contains(10) res10: Boolean = false
β€œfoo”.drop(1) res11: String = oo
β€œbar”.take(2) res12: String = ba