리스크립트에서는 if
, else
, 삼항 표현(ternary expression), for
및 while
을 지원합니다.
리스크립트는 그 유명한 패턴 매칭 역시 지원합니다. 이와 관련한 자세한 내용은 여기에서 확인할 수 있습니다.
If-Else & 삼항 표현(Ternary)
자바스크립트에서와 달리, 리스크립트의 if
는 표현(expression)입니다. 즉, 바디(body)의 내용을 평가합니다.
let message = if isMorning {"Good morning!"} else {"Hello!"}
var message = isMorning ? 'Good morning!' : 'Hello!';
참고: if-else
표현에서 else
브랜치가 없는 경우, 암시적으로 ()
를 제공합니다. (unit
타입이라고 부릅니다). 다음을 확인하세요.
if showMenu {displayMenu()}
if (showMenu) {displayMenu();}
이는 다음과 기본적으로 같습니다.
if showMenu {displayMenu()} else {()}
if (showMenu) {displayMenu();}
아래에서 다른 방법으로 이를 확인할 수 있습니다. 물론 이건 명백히 잘못된 표현입니다.
let result = if showMenu {1 + 2}
위 코드에서, else
브랜치는 암시적으로 unit
타입을 반환하고 if
브랜치는 int
타입을 반환하기 때문에 두 타입이 다르다는 오류가 발생합니다. 직관적으로 봐도 이것은 상식적입니다: 만약 showMenu
가 false
라면 result
의 값은 뭐가 돼야 할까요?
리스크립트는 삼항 축약 표현(ternary sugar)도 제공합니다. 그러나 가능하면, if-else를 사용 할 것을 장려합니다
let message = isMorning ? "Good morning!" : "Hello!"
var message = isMorning ? 'Good morning!' : 'Hello!';
리스크립트에서는 다른 언어에서보다 if-else
와 삼항 표현(ternary)을 극히 드물게 사용합니다; 강력한 패턴매칭이 이전에 필수로 사용해야 했던 코드들을 지워 버렸습니다.
For 루프(loop)
For 루프(loop)는 시작 값부터 끝 값까지(끝 값도 포함) 반복합니다.
for i in startValueInclusive to endValueInclusive {Js.log(i)}
for (var i = startValueInclusive; i <= endValueInclusive; ++i) {console.log(i);}
/* prints: 1 2 3 */for x in 1 to 3 {Js.log(x)Js.log(" ")}
for (var x = 1; x <= 3; ++x) {console.log(x);console.log(' ');}
for
루프 카운트에 downto
를 이용하면 반대 방향으로 반복할 수 있습니다.
for i in startValueInclusive downto endValueInclusive {Js.log(i)}
for (var i = startValueInclusive; i >= endValueInclusive; --i) {console.log(i);}
/* prints: 3 2 1 */for x in 3 downto 1 {Js.log(x)Js.log(" ")}
for (var x = 3; x >= 1; --x) {console.log(x);console.log(' ');}
While 루프(loop)
While 루프는 조건이 참(true)일 때까지 그 바디(body)의 코드 블록을 실행합니다.
while testCondition {/* body here */}
while (testCondition) {/* body here */}
팁과 트릭
리스크립트는 루프를 탈출하는 break
키워드가 없습니다. (함수에서 빠른 탈출을 위한 return
키워드도 없습니다.) 그러나 뮤터블 바인딩을 이용해 while 루프를 쉽게 탈출할 수 있습니다.
let break = ref(false)while !break.contents {if Js.Math.random() > 0.3 {break := true} else {Js.log("Still running")}}
var $$break = {contents: false,};while (!$$break.contents) {if (Math.random() > 0.3) {$$break.contents = true;} else {console.log('Still running');}}