[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..
[Nim 언어 강좌] slice, object
·
Programming Languages/Nim
슬라이스(Slices)슬라이스는 문법적으로 부분 구간(subrange) 타입과 비슷해 보이지만, 다른 맥락에서 사용됩니다. 슬라이스는 단순히 두 개의 경계값 `a`와 `b`를 담고 있는 Slice 타입의 객체일 뿐입니다. 슬라이스 자체로는 그리 유용하지 않지만, 다른 컬렉션 타입에서 Slice 객체를 받아 구간을 정의하는 연산자를 제공합니다. ```nimvar a = "Nim is a programming language" b = "Slices are useless." echo a[7 .. 12] # --> 'a prog'b[11 .. ^2] = "useful"echo b # --> 'Slices are useful.'``` 위 예시에서 슬라이스는 문자열의 일부를 수정하는 데 사용됩니다. 슬라이스의 ..
[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의 이름을..
[Gleam 언어 강좌] Tuples, Custom Types
·
Programming Languages/Gleam
TuplesList는 하나의 타입으로 된 여러 값을 모을 때 유용하지만, 서로 다른 타입의 여러 값을 함께 묶고 싶을 때는 Tuple이 간단하고 편리한 선택입니다. Tuple 접근(access) 구문을 사용하면 Pattern Matching 없이 Tuple의 요소를 가져올 수 있습니다.다시 말해, `some_tuple.0`은 첫 번째 요소, `some_tuple.1`은 두 번째 요소를 가져옵니다. Tuple은 Generic Type(제네릭 타입)으로, 자신이 포함하는 값들의 타입 파라미터를 가집니다.`#(1, "Hi!")`의 타입은 `#(Int, String)``#(1.4, 10, 48)`의 타입은 `#(Float, Int, Int)` Tuple은 보통 함수에서 2~3개의 값을 반환할 때 자주 사용됩니다..
[Nim 언어 강좌] Sequences, Open arrays, Varargs
·
Programming Languages/Nim
시퀀스 (Sequences)시퀀스는 배열과 비슷하지만 런타임 동안 길이가 동적으로 변할 수 있습니다(문자열처럼).시퀀스는 크기가 조절 가능하기 때문에 항상 힙(heap)에 할당되며, 가비지 컬렉션으로 관리됩니다.(cpp의 vector와 유사한 것 같습니다) 시퀀스는 항상 `int`로 인덱싱되며 0부터 시작합니다. `len`, `low`, `high` 연산을 시퀀스에도 사용할 수 있습니다.`x[i]` 구문은 시퀀스 x의 i번째 요소를 접근할 때 사용합니다. 시퀀스는 배열 생성자 `[]`와 배열을 시퀀스로 변환하는 연산자 `@`를 함께 사용하여 생성할 수 있습니다.또 다른 방법으로는 내장 프로시저 `newSeq`를 호출하여 공간을 할당하는 것입니다. 시퀀스 변수는 `@[]`로 초기화됩니다. 예시:```nim..
[Nim 언어 강좌] set, array
·
Programming Languages/Nim
집합(Set)`set` 타입은 수학적 집합의 개념을 모델링합니다. `set`의 기본 타입(basetype)은 특정 크기의 `ordinal type`(순서형 타입)만 가능합니다. 즉:int8 ~ int16uint8 / byte ~ uint16charenumordinal subrange types (예: `range[-10..10]`)위와 같은 타입만 가능합니다. `signed integer literal`(부호 있는 정수 리터럴)로 `set`을 만들면, 기본 타입은 `0 .. DefaultSetElements-1` 범위가 됩니다. 여기서 `DefaultSetElements`는 항상 2^8입니다. ```nimvar s = { 1, 2, 3 } # 범위 : 0 ~ 255``` `set`의 기본 타입의 최대..
[Gleam 언어 강좌] Pattern aliases, Guards
·
Programming Languages/Gleam
패턴 별칭 (Pattern aliases)`as` 연산자는 서브 패턴을 변수에 할당할 때 사용됩니다. 예를 들어, 패턴 `[_, ..] as first`는 빈 리스트가 아닌 모든 리스트에 매칭되며, 해당 리스트를 변수 `first`에 할당합니다. ```rustpub fn main() { echo get_first_non_empty([[], [1, 2, 3], [4, 5]]) echo get_first_non_empty([[1, 2], [3, 4, 5], []]) echo get_first_non_empty([[], [], []])} fn get_first_non_empty(lists: List(List(t))) -> List(t) { case lists { [[_, ..] as first, ..
[Gleam 언어 강좌] Multiple subjects, Alternative patterns
·
Programming Languages/Gleam
여러 개의 대상(Multiple subjects)때때로 하나의 `case` 표현식에서 여러 값을 동시에 패턴 매칭하는 것이 유용할 때가 있습니다. 이를 위해 여러 개의 대상(subjects)과 여러 개의 패턴을 각각 쉼표로 구분하여 사용할 수 있습니다. 여러 대상을 매칭할 때는 대상의 개수와 패턴의 개수가 같아야 합니다.패턴 중 하나의 `_` 부분을 제거해보면 컴파일 시점에서 어떤 오류가 나는지 확인할 수 있습니다. ```rustimport gleam/int pub fn main() { let x = int.random(2) let y = int.random(2) echo x echo y let result = case x, y { 0, 0 -> "둘 다 0입니다" 0, _ -> "..
[Gleam 언어 강좌] Recursion, Tail calls, List recursion
·
Programming Languages/Gleam
재귀 (Recursion)Gleam에는 반복문(loops)이 없습니다. 함수형 프로그래밍을 처음할 때 당황스러운 부분 중 하나입니다. 대신 반복은 재귀(recursion), 즉 최상위 함수가 자신을 다른 인자로 다시 호출하는 방식으로 수행됩니다. 재귀 함수는 반드시 최소 하나의 기저 사례(base case) 와 최소 하나의 재귀 사례(recursive case) 를 가져야 합니다.Base case(기저 사례)는 함수를 다시 호출하지 않고 값을 반환합니다.Recursive case(재귀 사례)는 다른 입력값으로 함수를 다시 호출하여 반복을 이어갑니다. Gleam 표준 라이브러리에는 여러 일반적인 반복 패턴을 위한 함수들이 있으며, 일부는 이후에 다루어질 것입니다. 그러나 더 복잡한 반복을 구현할 때는 직접..
[Gleam 언어 강좌] Case, variable/string/list pattern
·
Programming Languages/Gleam
Case expressions`case` 표현식은 Gleam 코드에서 가장 흔히 쓰이는 흐름 제어 방식이다. 다른 언어의 `switch`와 비슷하지만 대부분의 경우 훨씬 더 강력하다. 이것은 “데이터가 이런 모양이면 이 코드를 실행하라”라고 말할 수 있게 해주는데, 이를 패턴 매칭(pattern matching)이라고 한다. Gleam은 case 표현식에서 작성된 패턴들이 모든 가능한 값을 다루는지 확인하는 완전성 검사(exhaustiveness checking)를 수행한다. 이를 통해 다루는 데이터의 설계가 변경되더라도 논리가 최신 상태임을 확신할 수 있다. 패턴을 주석 처리하거나 불필요한 패턴을 추가해 보면 컴파일러가 어떤 문제를 보고하는지 확인할 수 있다. ```rustimport gleam/int..
sierraKilo
'docs' 태그의 글 목록