> 리크스크립트 튜토리얼
엄격 모드로 전환하기로 했더니, 에디터가 전에는 없던 온갖 경고를 쏟아냅니다. 당황할 필요 없습니다. 덜 관대하고, 특히 타입에 대해 자유를 덜 주는 것이 바로 엄격 모드의 존재 이유입니다. 자주 나오는 몇 가지 경고 사례를 살펴보며, 우선 무엇이 문제인지 이해하고 해결책을 찾아봅시다.
첫 번째 간단한 사례: 계산 결과를 정수 타입 변수에 저장하고 싶습니다.
문제는 sqrt 함수가 수학적으로 sqrt(4)가 2라 하더라도 항상 실수 타입 값을 반환한다는 점입니다. 그런데 실수는 손실 없이 정수 변수에 들어갈 수 없습니다. 예를 들어 sqrt(2)의 소수 부분은 어떻게 해야 할까요? 그래서 컴파일러는 명시적인 선택을 요구합니다. 이 경고를 해결하는 방법은 여러 가지입니다.
또 다른 사례: 다음과 같이 정의된 정수 연관 배열(Map)이 있고, 이 연관 배열의 값을 역시 정수 타입 변수에 저장하려고 합니다. 타입이 서로 맞아야 할 텐데...
왜 경고는 mapEntier[0]이 단순히 "integer"가 아니라 "integer?" 타입이라고 말할까요? 타입 끝의 "?"는 그 타입이 null 값도 허용한다는 뜻으로, "integer | null"과 같습니다. 그렇다면 타입상 integer만 담고 있는 연관 배열이 왜 null을 돌려줄 수 있을까요? 연관 배열에서 값을 읽으려면 키를 넘겨야 하는데, 여기서는 대괄호 안에 "0"을 넘겼습니다. 이 키는 연관 배열에 정의된 타입, 즉 integer여야 하므로 이 부분은 문제가 없습니다. 하지만 그 키가 연관 배열에 존재한다는 것을 에디터에 보장해 주는 것은 아무것도 없으며, 존재하지 않는 키로 연관 배열을 읽으면 반환값은 언제나 null입니다. 따라서 키로 연관 배열에 접근한 결과는 항상 nullable입니다. 이제 경고를 없애기 위해 이 문제를 어떻게 해결하는지 봅시다.
이 경우에는 정렬하고 싶은 정수 목록이 있습니다. 딱히 복잡할 것이 없어 보여서 문서의 예제를 그대로 가져왔습니다.
그런데 이 간단한 한 줄에서 경고가 2개나 나왔습니다. 첫 번째부터 봅시다. 괄호로 둘러싸여 있는데, 이는 문제가 함수의 매개변수에 있으며 기대되는 시그니처와 맞지 않는다는 뜻입니다. arraySort의 문서에서 시그니처를 확인해 봅시다: Function real | integer> => Array> 즉 매개변수 2개를 받는 함수로, 첫 번째 매개변수는 목록이고, 두 번째 매개변수는 역시 2개의 매개변수를 받아 정수 또는 실수를 반환하는 함수입니다. 첫 번째 매개변수로는 목록을 제대로 넘겼으니 문제가 없고, 문제는 두 번째 매개변수에 있습니다. 우리는 시그니처가 Function any>인 함수를 넘겼는데, arraySort는 Function real | integer>를 기대합니다. 반환 타입이 기대와 다른 것입니다.
콜백 함수의 타입 문제는 해결되었고, 이제 두 번째 경고를 해결할 차례입니다. 방금 본 것처럼 arraySort 함수의 반환값은 우리 변수가 기대하는 Array\가 아니라 단순한 Array이므로, 이 문제를 고치려면 반환값을 명시적으로 캐스팅해야 합니다.
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.