저는 게임 개발 프로젝트를 위해 zig를 배우고 있습니다. 자세한 내용은 여기에서 읽어보세요. 이것은 주로 JS/TS의 최근 경험에서 비롯된 언어에 대한 나의 초기(주로 긍정적인) 인상입니다.
오류는 가치입니다 - 현재로서는 예외가 최선이 아니라는 것이 꽤 대중적인 의견입니다. 그들은 숨겨진 제어 흐름을 생성하며 JavaScript에서는 선언조차 할 수 없습니다. 그러면 애플리케이션이 훨씬 더 불안정해집니다.
Zig는 쉽고 재미있는 오류 처리를 위해 오류 열거형과 멋진 구문 설탕을 사용합니다. 예를 들어 :
fn failingFunction() error{MyError}!void { return error.MyError; } pub fn main() !void { try failingFunction(); }
위 코드에서는 MyError 오류를 선언하고(별도로 수행할 수도 있음) 이를 반환합니다.
try는 다음과 같이 "오류가 반환되면 여기에 반환하세요"를 의미합니다.
failingFunction() catch |err| return err;저는 이 접근 방식이 훌륭한 조합이며 Go land의 끝없는 if(err != nil)에서 우리를 구해 준다고 믿습니다.
기타 하이라이트:
!void 구문 - ! 반환 유형과 오류 유형 간의 통합을 만드는 데 사용됩니다. Zig는 ! 앞에 오류를 추가하지 않는 것을 지원합니다. 이는 함수에서 실제로 반환하는 모든 오류의 통합을 생성하도록 되어 있습니다.
실제로는 이 구문이 도움이 되지 않습니다. 적어도 내 IDE 경험으로는 이 경우 어떤 지능도 얻지 못하며 이로 인해 기능이 덜 명확해집니다.무엇을 돌려받을지 말해주세요!
나는 이것이 main() 함수에서만 유용하다고 생각합니다.
쉽지만 이 접근 방식에는 문제가 있습니다.
failingFunction() catch |err| return err;무슨 일이 일어나고 있는지 매우 분명합니다! 게다가 변수는 불변이지만
정말로 변경해야 하는 경우 대신 값에 대한 포인터를 캡처할 수 있습니다.
이 메커니즘은 for, switch, catch 등을 포함하여 언어 전반에 걸쳐 사용될 수 있다는 점도 언급할 가치가 있습니다.Comptime 헛소리
매우 유연한 언어이기 때문에 Zig에 아주 잘 맞습니다. 유형도 값입니다. 즉, 유형에 대한 정보를 생성, 변경 및 가져올 수 있습니다(특히 comptime에서).
Zig Guide의 기본 예:
"검출 가능한 불법 행위" 즉, 컴파일 오류를 일으키는 불법적인 행위는 일반적으로 편집기에 표시되지 않습니다. 예를 들어:
failingFunction() catch |err| return err;저는 0.14(개발자) 마스터 브랜치 버전을 사용하고 있습니다. 제대로 작동하려면 댓글로 알려주세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3