Strict 모드에서의 nil 안전성
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 80개 중 77번째.
Lua에서 가장 흔한 충돌은 "attempt to index nil"입니다. 값이 없는데도 있다고 가정한 코드에서 발생합니다. Luau의 해결책은 nil 규율입니다. --!strict에서는 일반 string이 절대 nil일 수 없습니다. nil일 가능성이 실제로 있다면, 타입에 ?를 붙여 명시해야 합니다.
--!strict
local nickname: string? = nil -- 정상: string 또는 nil
local username: string = nil -- ✗ strict 모드에서 타입 오류이 규율은 양방향으로 적용됩니다. string?이 주어지면, nil이 아님을 확인하기 전까지는 엄격 모드에서 이를 문자열로 사용할 수 없습니다. 표준 도구는 일반 비교식이며, typeof 가드와 마찬가지로 타입 범위를 좁혀 줍니다.
local function shout(name: string?): string
if name ~= nil then
return string.upper(name) -- 여기서 name은 string입니다
end
return "NOBODY"
endnil이 유효한 경우가 아니라 버그일 수 있다면 assert를 사용하세요. assert(x ~= nil) 뒤에는 검사기가 해당 범위의 나머지 부분에서 x를 nil이 아닌 값으로 취급합니다. 또한 런타임에서는 잘못된 가정이 있는 지점에서 일찍 충돌하므로, 한참 떨어진 곳에서 충돌하는 일을 막을 수 있습니다.
이렇게 하면 편집하는 동안 검사기가 “누락되었을 수도 있는” 모든 값을 처리하도록 강제하고, 런타임 오류는 아예 발생하지 않습니다.
챌린지
쉬움안전한 기본값이 필요할 수 있는 이름을 지정하세요.
--!strict를 첫 번째 줄에 유지하세요.local function getDisplayName(fullName: string?): string을 작성해,nil이 아니면fullName을 반환하고, 그렇지 않으면"Anonymous User"을 반환하세요.getDisplayName("John Smith")과getDisplayName(nil)을 출력하세요.
Run Code를 누르세요. 출력에 John Smith과 Anonymous User이 표시됩니다.
직접 해보기
--!strict
-- 1) getDisplayName(fullName: string?): string, 값이 없으면 "Anonymous User"을 사용
-- 2) "John Smith"과 nil에 대해 결과를 출력
Luau 소개의 모든 레슨
4함수 다루기
매개변수와 반환값의 타입 지정익명 함수의 타입 지정아무것도 반환하지 않는 함수선택적 매개변수기본 매개변수 값불리언 기본값가변 인자 함수함수 타입 정의하기복습: 타입이 지정된 함수직접 연습해 보세요: 온라인 Luau 컴파일러