forked from alexeygritsenko/Scala-Lections
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lec01.scala
97 lines (73 loc) · 2.03 KB
/
lec01.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
Int
Double
Char
String
Boolean
Unit // Аналог void
// Является также оператором преобразования типов
i:Int
j:Double
(j/3.2):Int
// Переменные
var i = 2
i=i*2
i*=2
// i++ такого нету
// Нотируем тип
var i:Int=2:Int // Бессмысленно, но для понимания
// Второе описание типов (90%)
val i=2 // Неизменяемые значения
// i=i*2; - Неправильно
val i=arr.length+3 // Могут быть вычислены
// Всё имеет значения (всё вообще, любой оператор имеет значение)
// В Unit есть одно значение, равное "()"
val void:Unit = ()
// Точки запятой нету, поэтому нельзя делать такое
a*j
-b+2
// В этом случае догадается
obj
.foo
//====
val i=....
// Такого нету, оно не нужно!
// val j=(i<0)?0:1
// Пишем так
var j=if(i<0) 0 else 1
// return не существует вообще
// Чтобы выражение выше работало, ветка if и else должны генерировать один тип данных
// Так нельзя
// var j=if(i<0) 0 else "ga"
// Можно написать так
foo(if(i<0) 0 else 1)
// ===
val ans = {
val yes = io.stdin.readline // Метод без параметров, скобки можно не писать
if(yes == "yes") 1 else 0
}
bar({
...
})
{
...
if(...) print(...) else ()
}
while(условие) {
...
}
// Определение функции
// Нотировать типы здесь обязательно (только здесь обязательно)
def add(x:Int, y:Int):Int=x+y
def add(x:Int, y:Int):Int={
val res = x+y
print(res)
res
// print(x+y) x+y
}
add(5,4)
// Всё может быть вложено во всё
def add(x:Int, y:Int):Int={
def _print():Unit=print(x+y)
_print()
x+y
}