ReScript in Korean

개요

원문

자바스크립트와 비교

세미콜론(Semicolon)

자바스크립트리스크립트
린터나 포매터에서 강제함세미콜론 필요하지 않음!

주석(Comments)

자바스크립트리스크립트
/* Comment */같음
// Line comment같음

변수(Variable)

자바스크립트리스크립트
const x = 5;let x = 5
var x = y;없음 (감사하게도)
let x = 5; x = x + 1;let x = ref(5); x := x.contents + 1

문자열 & 캐릭터(String & Character)

자바스크립트리스크립트
"Hello world!"같음
'Hello world!'문자열은 "만 사용
"hello " + "world""hello " ++ "world"
`hello ${message}`같음

불리언(Boolean)

자바스크립트리스크립트
true, false같음
!true같음
||, &&, <=, >=, <, >같음
a === b, a !== b같음
깊은 동일성 없음 (반복 비교)a == b, a != b
a == b암시적인 캐스팅을 수반한 동일성 없음 (감사하게도)

숫자(Number)

자바스크립트리스크립트
3같음 *
3.1415같음
3 + 4같음
3.0 + 4.53.0 +. 4.5
5 % 3mod(5, 3)

* 자바스크립트는 integer와 float 간에 차이가 없다.

객체/레코드(Object/Record)

자바스크립트리스크립트
타입 없음type point = {x: int, mutable y: int}
{x: 30, y: 20}같음
point.x같음
point.y = 30;같음
{...point, x: 30}같음

배열(Array)

자바스크립트리스크립트
[1, 2, 3]같음
myArray[1] = 10같음
[1, "Bob", true](1, "Bob", true) *

* 자바스크립트의 이종 배열(heterogeneous array)은 리스크립트에서는 허용되지 않는다. 튜플을 사용할 것

Null

자바스크립트리스크립트
null, undefinedNone *

* 다시 한번 말하지만, 정신적인 동일성(spiritual equivalent)만 있다; 리스크립트에서는 null도 없을뿐더러 null 버그도 없다! 그러나 리스크립트에서는 null의 개념이 필요한 경우에 사용할 수 있는 option 타입이 있다.

함수(Function)

자바스크립트리스크립트
arg => retVal같음
function named(arg) {...}let named = (arg) => {...}
const f = function(arg) {...}let f = (arg) => {...}
add(4, add(5, 6))같음

블록(Blocks)

자바스크립트리스크립트
const myFun = (x, y) => {
const doubleX = x + x;
const doubleY = y + y;
return doubleX + doubleY
};
let myFun = (x, y) => {
let doubleX = x + x
let doubleY = y + y
doubleX + doubleY
}

If-else

자바스크립트리스크립트
if (a) {b} else {c}if a {b} else {c} *
a ? b : c같음
switchswitch but super-powered pattern matching!

* 리스크립트에서 조건은 항상 표현식(expression)이다! 다음과 같이 사용할 수 있다. let result = if a {"hello"} else {"bye"}

구조 분해 할당(Destructuring)

자바스크립트리스크립트
const {a, b} = datalet {a, b} = data
const [a, b] = datalet [a, b] = data *
const {a: aa, b: bb} = datalet {a: aa, b: bb} = data

* 컴파일러에서 data 의 길이가 2가 아닐 수도 있다는 경고(warning)를 제공한다.

루프(Loop)

자바스크립트리스크립트
for (let i = 0; i <= 10; i++) {...}for i in 0 to 10 {...}
for (let i = 10; i >= 0; i--) {...}for i in 10 downto 0 {...}
while (true) {...}while true {...}

JSX

자바스크립트리스크립트
<Comp message="hi" onClick={handler} />같음
<Comp message={message} /><Comp message /> *
<input checked /><input checked=true />
자식 컴포넌트 스프레드 없음<Comp>...children</Comp>

* 함수 인자와 매개변수 이름이 같은 경우에는 이를 축약하여 표현할 수 있습니다.

예외 처리(Exception)

자바스크립트리스크립트
throw new SomeError(...)raise(SomeError(...))
try {a} catch (Err) {...} finally {...}try a catch { | Err => ...} *

* finally 없음

블록(Blocks)

마지막으로 {}로 경계가 나뉘어진 블록 표현은 암시적으로 리턴을 합니다. 자바스크립트에서는 즉시 실행 함수를 통해서 시뮬레이션해볼 수 있습니다. (함수 바디가 각각의 로컬 스코프를 가지고 있기 때문)

자바스크립트리스크립트
let result = (function() {
const x = 23;
const y = 34;
return x + y;
})();
let result = {
let x = 23
let y = 34
x + y
}

공통 피쳐(Common Feature)들의 자바스크립트 출력

피쳐(Feature)예시자바스크립트 출력
문자열(String)"Hello""Hello"
문자열 보간(String Interpolation)`Hello ${message}`"Hello " + message
캐릭터(Character) (비추천)'x'120 (char code)
정수(Integer)23, -2323, -23
실수(Float)23.0, -23.023.0, -23.0
정수 더하기(Integer Addition)23 + 123 + 1
실수 더하기(Float Addition)23.0 +. 1.023.0 + 1.0
정수 나누기/곱하기(Integer Division/Multiplication)2 / 23 * 12 / 23 * 1
실수 나누기/곱하기(Float Division/Multiplication)2.0 /. 23.0 *. 1.02.0 / 23.0 * 1.0
실수 거듭제곱(Float Exponentiation)2.0 ** 3.0Math.pow(3, 4)
문자열 연결(String Concatenation)"Hello " ++ "World""Hello " + "World"
비교(Comparison)>, <, >=, <=>, <, >=, <=
불리언 연산(Boolean operation)!, &&, ||!, &&, ||
얕은 및 깊은 동일성(Shallow and deep Equality)===, =====, ==
리스트(List) (비추천)list{1, 2, 3}{hd: 1, tl: {hd: 2, tl: {hd: 3, tl: 0}}}
리스트 앞에 값 추가(List Prepend)list{a1, a2, ...oldList}{hd: a1, tl: {hd: a2, tl: theRest}}
배열(Array)[1, 2, 3][1, 2, 3]
레코드(Record)type t = {b: int}; let a = {b: 10}var a = {b: 10}
여러 줄 주석(Multiline Comment)/* Comment here */출력에 나오지 않음
한 줄 주석(Single line Comment)// Comment here출력에 나오지 않음