Clojure с точки зрения разработчика JS

Почему LISP (Clojure)?

Возможно, после некоторого времени изучения объектной ориентации я увидел некоторые ограничения этой парадигмы, и чтобы сменить обстановку, я искал что-то, что решало бы некоторые проблемы по-другому.

Этот комикс xkcd всегда вне времени, даже после многих лет существования lisp, мы все равно в итоге используем его снова, в данном случае с более современной выделкой и мощной машиной, которой пользуется почти каждый. JVM, мы все знаем о мощности JVM с параллелизмом и параллельностью, которая уже некоторое время является стандартом рынка. Clojure с виртуальной машиной java приносит эту мощь с простотой кода, как указано.

Код — это данные

В lisp все является списком, а список понимается как Array. Еще один существенный момент: поскольку это функциональный язык, диалект лиспа, он использует функции в качестве своего ядра. Конечно, вы, как разработчик JS, уже знаете, что это значит: использовать функции и обратные вызовы, иметь функции в качестве возврата и использовать функции в качестве аргумента.

Что это за создание функций?

В JS мы объявляем функции несколькими способами, в наглядном виде это можно сделать так:
пример, который я приведу, — это функция, которая суммирует два аргумента и возвращает результат

  function somar( a, b){
    return a + b
  }
Войдите в полноэкранный режим Выход из полноэкранного режима

теперь в clojure:

(defn somar
  "Recebe dois valores como parametro e retorna o resultado da soma"
  [a b]
  (+ a b))
Войдите в полноэкранный режим Выход из полноэкранного режима

Супер крутые моменты, которые я люблю в clojure, эта строка, которую я поместил в качестве второго параметра, является документацией функции. Автодокументируемый код.
Сумма и все математические функции следуют польской нотации

А переменные?

Пытаясь уменьшить побочные эффекты, мы создаем переменные внутри функций, чтобы показать, что означает каждый символ.
В следующем примере я создал несколько переменных.

(defn delivery-tax
  "Calculate the price of the delivery tax based on input based on this table:
   80 => $ -> 15
   80  < $ > 250 -> 5
   $ >=  250  -> 0"
  [final-items-value]
  (let [free-tax 0   ;;Variaveis
        mid-tax 5
        max-tax 15
        min-price-limit 80
        max-price-limit 250
        ]
    (cond
      (<= final-items-value 0) "err"
      (<= final-items-value min-price-limit) max-tax
      (and (> final-items-value min-price-limit) (< final-items-value max-price-limit)) mid-tax
      (>= final-items-value max-price-limit) free-tax)))
Войдите в полноэкранный режим Выход из полноэкранного режима

Все равно все это в скобках?

Вы кодите на JS, то, что вы видите в день скобок и скобочек, мало чем отличается от кода на clojure.
Но поскольку это просто скобки, мы получаем некоторые суперспособности, например, макросы, и я хотел бы закончить этот блог-пост двумя забавными макросами, которые показывают силу языка.
Функция some в clojure и многих других языках, принимает массив и проверяет, присутствует ли в нем какое-либо значение, как в данном случае здесь

(some #(= 5 %) [1 2 3 4 5])
=> true
Войдите в полноэкранный режим Выход из полноэкранного режима

мы можем изменить его с помощью макроса так, чтобы эта же функция могла (lol) исчезнуть все результаты массива

(some [1 2 3 4 5])
=> 15
Войдите в полноэкранный режим Выход из полноэкранного режима

Наконец, я могу сделать так, чтобы некоторые буквально исчезли вместе с моим массивом, если я хочу изменить макрос

(some [1 2 3 4 5])
=> []
Войдите в полноэкранный режим Выход из полноэкранного режима

Это простое введение в Clojure было тем, что я хотел бы увидеть раньше, и заставило бы меня еще больше загореться желанием писать на этой вещи, которая так проста и так увлекательна одновременно.

Я рекомендую его всем, кто, как и я, устал от одного и того же.

Оцените статью
devanswers.ru
Добавить комментарий