원시 타입(Primitive Types)

ReScript는 string, int, float 등과 같은 친숙한 원시 타입을 제공합니다.

문자열(String)

ReScript 문자열, 즉, string 타입은 큰 따옴표를 사용합니다(작은 따옴표는 아래 문자 타입에서 설명합니다).

ReScriptJS Output
let greeting = "Hello world!"
let multilineGreeting = "Hello
 world!"

문자열을 이어 붙이려면 ++를 사용합니다.

ReScriptJS Output
let greetings = "Hello " ++ "world!"

문자열 보간

다음은 문자열에 허용되는 특수한 문법입니다.

  • 이전과 같은 멀티라인 문자열

  • 이스케이프 없는 특수 문자 사용

  • 보간

  • 올바른 유니코드 처리

ReScriptJS Output
let name = "Joe"

let greeting = `Hello
World
👋
${name}
`

이는 특수 문자를 이스케이프할 필요가 없다는 점을 제외하고는 JavaScript의 백틱(`) 문자열 보간법과 같습니다.

문자열 보간을 위해서, 바인딩(위의 예제에서는 name)이 문자열이 아닌 경우 바인딩을 문자열로 변환해야 합니다. 보간을 통해 바인딩을 문자열로 암시적으로 변환하려면 앞에 다음과 같이 j를 추가하세요.

ReScriptJS Output
let age = 10
let message = j`Today I am $age years old.`

사용법

API docs에 설명된 Js.StringAPI를 사용합니다. ReScript 문자열은 JavaScript 문자열에 대응되므로 두 표준 라이브러리에서 문자열 관련 작업을 혼합하고 매칭시킬 수 있습니다.

사용 팁과 트릭

여러분은 지금 즈음 좋은 타입 시스템을 가지고 있을 것입니다! 타입이 없는 언어에서는, 다음과 같이 문자열의 의미를 과부하 시키는 경우가 허다합니다.

  • 유니크 id:var BLUE_COLOR = "blue"

  • 데이터 구조 식별자:var BLUE = "blue" var RED = "red" var colors = [BLUE, RED]

  • 객체 필드의 이름을 문자열로 접근:person["age"] = 24

  • enum처럼 쓰는 경우:if (audio.canPlayType() === 'probably') {...} (ಠ_ಠ)

  • 그 외 ReScript의 대안에 익숙해지면 곧 알게 될 다른 말도 안 되는 사용법

JavaScript와 같은 언어의 열악한 문자열 타입에 과부하가 걸릴수록 타입 시스템(또는 팀 동료)에게서 도움 받기 힘들 것 입니다! ReScript는 위의 좋지 못한 문자열 사용 사례에 대해 간결하고 빠르고 유지 가능한 타입 및 자료 구조를 제공합니다. (추가 설명은 배리언트 섹션을 참고하세요)

문자(Char)

ReScript는 다음과 같이 단일 문자 타입을 가지고 있습니다.

ReScriptJS Output
let firstLetterOfAlphabet = 'a'

참고: 문자 타입은 유니코드 또는 UTF-8을 지원하지 않기 때문에 추천하지 않습니다.

문자열을 문자로 변환할 때에는 String.get("a", 0)를 사용하고, 문자를 문자열로 만들기 위해서는 String.make(1, 'a')를 사용합니다.

정규 표현식

ReScript 정규 표현식은 대응하는 JavaScript에 맞게 깔끔하게 컴파일됩니다.

ReScriptJS Output
let r = %re("/b/g")

위와 같은 정규 표현식의 타입은 Js.Re.t입니다. Js.Re 모듈 메뉴얼에는 JavaScript에서 볼 수 있는 정규 표현식 보조 기능이 포함되어 있습니다.

불리언(Boolean)

ReScript 불리언의 타입은 bool이고, true 또는 false가 될 수 있습니다. 일반 연산자로 다음과 같은 것들이 있습니다.

  • &&: 그리고(and)

  • ||: 또는(or)

  • !: 부정(not)

  • <=, >=, <, >

  • ==: 구조적 동등성, 심층적인 자료 구조 비교. (1, 2) == (1, 2)true. 편리하지만 사용에 주의해야 합니다.

  • ===: 참조 동등성, 얕은 비교. (1, 2) === (1, 2)false. let myTuple = (1, 2); myTuple === myTupletrue.

  • !=: 구조적 비동등.

  • !==: 참조 비동등.

ReScript의 true/false는 JavaScript true/false로 컴파일됩니다.

정수

32비트 범위를 가지며, 만일 범위를 넘는 경우에 잘립니다. ReScript는 +-*/등의 일반적인 연산자를 제공합니다. Js.Int에서 더 자세히 나와 있습니다.

JavaScript의 number를 바인딩할 때는 주의해야 합니다! ReScript 정수는 JavaScript 숫자보다 범위가 훨씬 작기 때문에 32비트 이상의 정수는 잘릴 수 있습니다. JS number를 바인딩할 때(특히, JavaScript Dates와 epoch time에) floats 사용을 권장합니다.

가독성을 향상시키기 위해 1_000_000과 같은 숫자 리터럴 가운데에 밑줄을 넣을 수 있습니다. 밑줄은 세 자리마다가 아닌 숫자 내의 어디에나 임의의 위치에 배치할 수 있습니다.

부동 소수점(Floats)

플로트에는 +.-.*./. 등의 다른 연산자가 필요합니다. 예를 들어, 0.5 +. 0.6과 같이 사용합니다. Js.Float에서 더 자세히 알아보세요.

정수와 마찬가지로 리터럴 내에서 밑줄을 사용하여 가독성을 높일 수 있습니다.

Unit

unit 타입은 ()라는 단일 값을 가지며, JavaScript의 undefined로 컴파일됩니다. 다양한 장소에서 자리 표시자(placeholder)로 사용되는 더미 타입입니다. 발견하기 전까지는 필요 없을 것입니다.