us

use 식 에서 Gleam

2개의 연습 문제

use 식 소개

Gleam에서는 다른 함수를 인자로 받는 함수, 즉 고차 함수를 작성하고 사용하는 일이 흔해요. 여러 고차 함수를 한꺼번에 사용하다 보면 들여쓰기 단계가 많아져서 코드를 읽기 어려워질 때가 있어요.

예를 들어, Result(Int, Nil) 타입을 반환하는 여러 함수를 호출하고, 네 함수가 모두 성공하면 그 값들을 더하는 함수가 여기 있어요.

import gleam/result

pub fn main() -> Result(Int, Nil) {
  result.try(function1(), fn(a) {
    result.try(function2(), fn(b) {
      result.try(function3(), fn(c) {
        result.try(function4(), fn(d) {
          Ok(a + b + c + d)
        })
      })
    })
  })
}

Gleam의 use 표현식을 사용하면 들여쓰기 없이 이 코드를 작성할 수 있어서, 읽기가 더 쉬워지는 경우가 많아요.

import gleam/result

pub fn main() -> Result(Int, Nil) {
  use a <- result.try(function1())
  use b <- result.try(function2())
  use c <- result.try(function3())
  use d <- result.try(function4())
  Ok(a + b + c + d)
}

use 표현식은 블록 안에서 뒤따르는 모든 문을 모아서, 이를 콜백 함수로 만들어 함수 호출의 마지막 인자로 전달해요. use 키워드와 <- 기호 사이에 있는 변수들은 콜백 함수에 전달될 인자들의 이름이에요.

// This use expression
use a <- function(1, 2)
io.println("Hello!")
a

// Is equivalent to this normal function call
function(1, 2, fn(a) {
  io.println("Hello!")
  a
})

콜백 함수는 몇 개의 인자든 받을 수 있고, 아예 받지 않을 수도 있어요.

use a, b, c, d <- call_4_function()

use <- call_0_function()

use 표현식으로 호출할 수 있는 함수를 만들기 위한 특별한 조건은 없어요. 마지막 인자로 콜백 함수를 받기만 하면 돼요.

pub fn call_twice(function: fn() -> t) -> #(t, t) {
  let first = function()
  let second = function()
  #(first, second)
}

Gleam의 use 표현식은 많은 문제에 적용할 수 있는 아주 강력한 기능이지만, 지나치게 사용하면 코드를 읽기 어렵게 만들 수 있어요. 일반적으로는 평범한 함수 호출 문법을 사용하고, 코드를 더 읽기 쉽게 만들어 줄 때만 use 표현식을 꺼내 쓰는 편이 좋아요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요

use 식 배우기