'nothing', 'empty'를 의미한다.
python의 'none'과 유사하다.
정수에 사용되는 arithmetic operator
Unary Arithmetic : -
Binary Arithmetic : +, -, *, /, mod (나머지)
Unary Bitewise : lnot
Binary Bitewise : lsl, lsr, asl, asr, land, lor, lxor
Ocaml에서 " 2 + 3.0 " 은 오류가 난다.
int + float의 조합은 오류가 난다.
+
는 int 값만 더할 수 있으며, float 값은 더할 수 없다.
Float operation에는 +. -. *. /. 을 사용한다.
" 2.0 + 3.0 "은 오류가 난다.
" 2.0 +. 3.0 "은 정상적으로 출력된다.
✔️ Type Conversion Functions
int_of_float : int -> float
float_of_int : float -> int
‘a’, ‘z’, ‘1’ …
✔️ Escape sequence
"hello”, “I am string”, …
📌 Operators in string
✔️ ^: string concatenation
두 개의 string을 연결해주는 operator
e.g. “Hello ” ^ “World” => “Hello World”
✔️ .[n] : random access : 특정 인덱스에 접근
e.g. “Hello”.[1] => ‘e’ // 1번 index = e
📌 Useful library modules
✔️ String.length : string의 길이 리턴
e.g. String.length “Hello” => 5
✔️ String.sub : substring을 잘라서 리턴
๏ e.g. String.sub “Hello” 2 3 => “ll” // 2와 3만 잘라서 리턴
✔️ true or false
📌 Comparison operators
✔️ structual equality : 두 변수에 든 내용이 같은지
a 변수 수정과 b 변수 수정은 별개인데, 둘다 값 5를 가진 경우
✔️ physical equality : 두 변수가 물리적으로 동일한 경우
a 변수를 수정할 때 b 변수도 수정된다 == 물리적 동일성
x=y : x equals y (structural equality)
x<>y : x does not equals y (structural equality)
x==y : x is identical with y (physical equality)
x!=y : x is not identical with y (physical equality)
x<y : x is less than y
x>y : x is greater than y
x<=y : x is less than or equal to y
x>=y : x is greater than or equal to y
statement는 상태 전이를 일으킨다. A statement does something.
expression은 상태 전이를 일으키지는 않지만 값이 반환된다. An expression evaluates to a value.
✔️ 순수 함수형 언어는 오로지 expression으로만 이루어져 있으며 statement는 존재하지 않는다. 한 줄 한 줄 모두 값을 리턴하며, 상태전이를 하지 않으므로 메모리 상태를 변화시키지 않는다.
✔️ ocaml도 대부분 expression로 되어 있지만 제한된 형태로 메모리 상태를 변경하고 상태전이를 일으킬 수는 있다.
✔️ Statement-oriented(“imperative languages”): C, C++, Java, Python ..
✔️ expression-oriented(“functional language”): Haskell, Scala, Lisp
컴파일 시점에 Type Checking이 이뤄진다.
Type 에러는 프로그램 실행 이전에 감지된다.
➡ C, C++, Java, Scala, etc
런타임 시점에 Type Checking이 이뤄진다.
프로그램 실행 도중에 Type Error가 발생할수 있다.
➡ Python, Javascript, Ruby, List, etc
✔️ Type-safe languages
런타임 상에서 Type error가 발생하지 않는다는 것을 보장한다. 모든 타입 에러가 컴파일 시점에 감지된다.
(Haskell, Scala)✔️ Unsafe languages
Statically typed 언어라고 해도, 일부 타입 에러는 런타임 상에서 발견될 수 있다.
(C, C++)
✔️ Statically typed languages
⭕ 초기 개발 단계에서 타입 에러가 모두 걸러진다.
⭕ 런타임 상에서의 체킹이 생략되므로 프로그램 실행이 효율적이다.
❌ 다이나믹언어보다 덜 flexible 해진다.✔️ Dynamically typed languages:
⭕ 빠른 프로토타입과 개발
⭕ 더 flexible한 특징을 가진다.
❌ Type error가 런타임에서 발견된다.