المسارات
/
Gleam
Gleam
/
المنهج
/
تعبيرات `use`
تع

تعبيرات `use` في Gleam

تمرينان

نبذة عن تعبيرات `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)
        })
      })
    })
  })
}

تسمح لنا تعبيرات use في Gleam بكتابة هذا الكود بدون المسافات البادئة، مما يجعله غالبًا أسهل في القراءة.

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)
}

تعبيرات use في Gleam ميزة قوية جدًا يمكن تطبيقها على كثير من المسائل، لكن عند الإفراط في استخدامها قد تجعل الكود صعب القراءة. ويُفضّل عمومًا استخدام صيغة استدعاء الدالة العادية، وألا نلجأ إلى تعبيرات use إلا عندما تجعل الكود أسهل في القراءة.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة

تعلّم تعبيرات `use`