[Gleam 언어 강좌] Multi target externals, External gleam fallbacks
·
Programming Languages/Gleam
Multi target externals (다중 타깃 외부 함수)하나의 함수에 대해 여러 개의 외부 구현(external implementation) 을 지정할 수 있습니‍다.이렇게 하면 동일한 함수가 Erlang과 JavaScript 양쪽 런타임(runtime) 에서 모두 동작할 수 있습니‍다. 만약 현재 컴파일 대상(target)에 대한 구현이 존재하지 않는다면,컴파일러는 에러(error) 를 발생시킵니‍다. 구현 시 유의점가능하다면 모든 타깃(Erlang, JavaScript) 에 대해 구현을 제공하는 것이 바람직합니‍다.하지만 입출력(IO) 과 동시성(concurrency) 처리 방식이 서로 다르기 때문에 항상 가능한 것은 아닙니다.Erlang 에서는 동시 입출력(concurrent IO)이 런타..
[Gleam 언어 강좌] Bool assert, Externals
·
Programming Languages/Gleam
Bool assertBool `assert`는 Gleam에서 프로그램을 강제로 패닉(panic) 시킬 수 있는 마지막 방법으로, 주로 테스트(assertion) 를 작성할 때 사용합니‍다. 이는 `let assert`와 유사하지만, 특정 패턴에 맞는지를 검사하는 대신,불리언(Boolean) 값이 `True`로 평가되는지를 검사합니‍다. 다른 패닉 관련 키워드(panic, todo, let assert)와 마찬가지로,`as` 키워드를 사용하면 커스텀 메시지를 추가할 수 있습니‍다.이 경우, 값이 `False`로 평가되면 일반적인 "Assertion failed" 대신지정한 메시지가 표시됩니‍다. Bool `assert`는 테스트 코드(test code) 에서 사용하도록 설계되었으며,애플리케이션이나 라이브러..
[Gleam 언어 강좌] todo, panic, let assert
·
Programming Languages/Gleam
todo`todo` 키워드는 아직 구현되지 않은 코드(not yet implemented) 를 표시하는 데 사용됩니‍다. `as "some string"` 구문은 선택 사항(optional)이지만,코드 내에 여러 개의 todo 블록이 있는 경우에는 어떤 부분이 미완성인지 구분하기 위해 메시지를 포함시키는 것이 좋습니‍다. todo가 사용되면 Gleam 컴파일러는코드가 완성되지 않았다는 경고(warning) 를 출력합니‍다.만약 해당 코드가 실제로 실행되면, 프로그램은 해당 메시지와 함께 충돌(crash) 합니‍다. ```rustpub fn main() { todo as "I haven't written this code yet!"}pub fn todo_without_reason() { todo}```..
[Gleam 언어 강좌] opaque type, use
·
Programming Languages/Gleam
불투명 타입 (Opaque types)Opaque type(불투명 타입) 이란,타입 자체(custom type)는 공개(public)되어 다른 모듈에서도 사용할 수 있지만,그 생성자(constructor) 는 비공개(private)이며 해당 타입을 정의한 모듈 내부에서만 사용할 수 있는 타입을 말합니‍다. 이 방식은 다른 모듈이 그 타입의 값을 직접 생성하거나패턴 매칭(pattern matching)을 수행하는 것을 방지합니‍다. 이러한 특성은 스마트 생성자(smart constructor) 를 만들 때 유용합니‍다.스마트 생성자는 타입의 값을 생성하되,프로그래머가 직접 생성자를 호출할 때보다 더 제한적인 규칙을 적용하는 함수입니‍다.이를 통해 타입이 항상 올바르게 사용되도록 보장할 수 있습니‍다. 예를..
[Gleam 언어 강좌] Dict, Option Module
·
Programming Languages/Gleam
Dict 모듈 (Dict Module)`gleam/dict` 표준 라이브러리 모듈은 Gleam의 `Dict` 타입과 이를 다루기 위한 함수들을 정의합니‍다.Dict(딕셔너리) 는 키(key) 와 값(value) 의 쌍으로 이루어진 집합(collection)이며,다른 언어에서는 hashmap 혹은 table(테이블) 이라고 부르기도 합니‍다.`new` 와 `from_list` 함수는 새로운 Dict를 생성하는 데 사용됩니‍다.`insert` 와 `delete` 함수는 Dict에 항목을 추가하거나 제거하는 데 사용됩니‍다. 리스트(List)와 마찬가지로, Dict도 불변(immutable) 합니‍다.즉, Dict에 항목을 삽입하거나 삭제하면 기존 Dict를 수정하는 대신,해당 항목이 추가 또는 제거된 새로운..
[Gleam 언어 강좌] Standard library package, List, Result Module
·
Programming Languages/Gleam
표준 라이브러리 패키지 (Standard Library Package)Gleam의 표준 라이브러리(Standard Library) 는 일반적인 Gleam 패키지이며,Hex 패키지 저장소(Hex package repository)에 게시되어 있습니다.원한다면 이를 사용하지 않을 수도 있으나, 거의 모든 Gleam 프로젝트가 이에 의존합니‍다. 지금까지 이 가이드에서 가져온 모든 모듈(예: `gleam/io`)은 표준 라이브러리에 포함되어 있습니‍다. 표준 라이브러리의 전체 문서는 HexDocs 에서 확인할 수 있습니‍다.이제 가장 자주 사용되는 몇 가지 모듈을 살펴보겠습니‍다. ```rustimport gleam/io pub fn main() { io.println("Hello, Joe!") io.pr..
[Gleam 언어 강좌] Results, Bit arrays
·
Programming Languages/Gleam
Results (결과 타입)Gleam은 예외(exception)를 사용하지 않습니다.대신, 성공하거나 실패할 수 있는 계산(computation)은 `Result(value, error)` 라는 내장 타입을 반환합니다. 이 타입은 두 가지 variant(변형)을 가집니다:`Ok` — 성공적인 계산의 반환값을 담습니다.`Error` — 실패의 원인을 담습니다. 이 타입은 제네릭(Generic)으로, 성공 값과 에러 값 각각에 대해 하나씩 두 개의 타입 매개변수(type parameters)를 가집니다.따라서 Result는 어떤 종류의 성공 값과 실패 값도 표현할 수 있습니다. 일반적으로 Gleam 프로그램이나 라이브러리에서는발생 가능한 모든 문제를 나타내는 사용자 정의 타입(custom type)을 정의합..
[Gleam 언어 특강] Generic custom types, Nil
·
Programming Languages/Gleam
Generic Custom Types (제네릭 사용자 정의 타입)함수(functions)처럼, custom types(사용자 정의 타입)도 generic(제네릭)을 가질 수 있습니다.즉, 타입이 포함하는 데이터의 타입을 type parameter(타입 매개변수)로 일반화할 수 있습니다. 아래 예시는 `Option` 타입의 정의입니다.이 타입은 어떤 값이 존재(Some)할 수도 있고, 부재(None)일 수도 있음을 나타냅니다.이 개념은 매우 자주 쓰이며, 실제로 Gleam 표준 라이브러리의 `gleam/option` 모듈에 이미 구현되어 있습니다. ```rustpub type Option(inner) { Some(inner) None} // 문자열(String) 타입의 Optionpub const na..
[Gleam 언어 강좌] Record Pattern Matching, Record updates
·
Programming Languages/Gleam
Record Pattern Matching (레코드 패턴 매칭)Record(레코드)에서도 패턴 매칭을 수행할 수 있으며, 이를 통해 하나의 record 안에 있는 여러 필드를 분리하여 각각의 변수에 할당할 수 있습니다. 이는 tuple(튜플)이나 list(리스트)에서의 매칭과 유사합니다. `let` 키워드는 단일 variant를 가지는 custom type이나, 이미 어떤 variant인지 확실히 알려진 경우(예: case 표현식에서 매칭된 이후)에만 사용할 수 있습니다. 불필요한 필드를 무시하고 싶다면 `_` 또는 `..` spread(스프레드) 구문을 사용할 수 있습니다. ```rustimport gleam/io pub type Fish { Starfish(name: String, favourite..
[Gleam 언어 강좌] Records, Record accessors
·
Programming Languages/Gleam
RecordsCustom type의 variant는 내부에 다른 데이터를 가질 수 있습니다. 이런 경우 variant를 record라고 부릅니다. Record의 필드(field)에는 label(라벨)을 붙일 수 있으며, 이 라벨은 function argument label(함수 인자 라벨)처럼 record constructor(레코드 생성자)를 호출할 때 옵션으로 사용할 수 있습니다. 일반적으로 필드에 라벨이 정의된 variant에서는 라벨을 사용하는 것이 권장됩니다. Custom type에서 단 하나의 variant가 데이터를 가지는 경우가 흔한데, 이는 다른 언어에서의 struct나 object와 같은 역할을 합니다. Custom type을 단일 variant로 정의할 때, 그 variant의 이름을..
sierraKilo
'Programming Languages/Gleam' 카테고리의 글 목록