Учебники

Clojure — основной синтаксис

Чтобы понять основной синтаксис Clojure, давайте сначала рассмотрим простую программу Hello World.

Hello World как полная программа

Напишите «Hello world» в полной программе Clojure. Ниже приведен пример.

пример

Live Demo

(ns clojure.examples.hello
   (:gen-class))
(defn hello-world []
   (println "Hello World"))
(hello-world)

Следующие вещи необходимо отметить о вышеупомянутой программе.

  • Программа будет написана в файле с именем main.clj. Расширение «clj» — это расширение имени файла кода clojure. В приведенном выше примере имя файла называется main.clj.

  • Ключевое слово defn используется для определения функции. Мы подробно рассмотрим функции в другой главе. Но пока знайте, что мы создаем функцию с именем helloworld, которая будет иметь наш основной код Clojure.

  • В нашем коде Clojure мы используем оператор println для вывода «Hello World» на вывод консоли.

  • Затем мы вызываем функцию hello-world, которая, в свою очередь, запускает оператор println.

Программа будет написана в файле с именем main.clj. Расширение «clj» — это расширение имени файла кода clojure. В приведенном выше примере имя файла называется main.clj.

Ключевое слово defn используется для определения функции. Мы подробно рассмотрим функции в другой главе. Но пока знайте, что мы создаем функцию с именем helloworld, которая будет иметь наш основной код Clojure.

В нашем коде Clojure мы используем оператор println для вывода «Hello World» на вывод консоли.

Затем мы вызываем функцию hello-world, которая, в свою очередь, запускает оператор println.

Вышеуказанная программа производит следующий вывод.

Выход

Hello World

Общая форма заявления

Общая форма любого оператора должна оцениваться в фигурных скобках, как показано в следующем примере.

(+ 1 2)

В приведенном выше примере все выражение заключено в фигурные скобки. Результат вышеприведенного оператора равен 3. Оператор + действует как функция в Clojure, которая используется для добавления чисел. Значения 1 и 2 известны как параметры функции .

Давайте рассмотрим другой пример. В этом примере str — это оператор, который используется для объединения двух строк. Строки «Hello» и «World» используются в качестве параметров.

(str "Hello" "World")

пример

Если мы объединим два приведенных выше утверждения и напишем программу, это будет выглядеть следующим образом.

Live Demo

(ns clojure.examples.hello
   (:gen-class))
(defn Example []
   (println (str "Hello World"))
   (println (+ 1 2)))
(Example)

Выход

Вышеуказанная программа производит следующий вывод.

Hello World
3

Пространства имен

Пространство имен используется для определения логической границы между модулями, определенными в Clojure.

Текущее пространство имен

Это определяет текущее пространство имен, в котором находится текущий код Clojure.

Синтаксис

*ns*

пример

В командном окне REPL выполните следующую команду.

*ns*

Выход

Когда мы запустим указанную выше команду, вывод будет отложен в зависимости от текущего пространства имен. Ниже приведен пример вывода. Пространство имен кода Clojure —

clojure.examples.hello

(ns clojure.examples.hello
   (:gen-class))
(defn Example []
   (println (str "Hello World"))
   (println (+ 1 2)))
(Example)

Требовать заявление в Clojure

Код Clojure упакован в библиотеках. Каждая библиотека Clojure принадлежит пространству имен, которое аналогично пакету Java. Вы можете загрузить библиотеку Clojure с помощью оператора Require.

Синтаксис

(require quoted-namespace-symbol)

пример

Ниже приведен пример использования этого утверждения.

(ns clojure.examples.hello
   (:gen-class))
(require clojure.java.io’)
(defn Example []
   (.exists (file "Example.txt")))
(Example)

В приведенном выше коде мы используем ключевое слово require для импорта пространства имен clojure.java.io, в котором есть все функции, необходимые для ввода / вывода. Поскольку у нас нет необходимой библиотеки, мы можем использовать функцию ‘file’ в приведенном выше коде.

Комментарии в Clojure

Комментарии используются для документирования вашего кода. Однострочные комментарии идентифицируются с помощью ;; в любой позиции на линии. Ниже приведен пример.

пример

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (println "Hello World"))
(Example)

Разделители

В Clojure операторы могут быть разделены или разделены с помощью фигурных или квадратных скобок.

пример

Ниже приведены два примера.

Live Demo

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (println (+ 1 2 3)))
(Example)

Выход

Вышеуказанная программа производит следующий вывод.

6

пример

Ниже приведен еще один пример.

Live Demo

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (println [+ 1 2 3]))
(Example)

Выход

Вышеуказанная программа производит следующий вывод.

[#object[clojure.core$_PLUS_ 0x10f163b "clojure.core$_PLUS_@10f163b"] 1 2 3]

Пробелы

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

Например, следующие два оператора эквивалентны, и результат обоих операторов будет 15.

(+ 1 2 3 4 5)
(+ 1, 2, 3, 4, 5)

Хотя Clojure игнорирует запятые, он иногда использует их, чтобы программисту было легче читать.

Например, если у вас есть хеш-карта, подобная следующей (def a-map {: a 1: b 2: c 3}), и вы запросите ее значение в окне REPL, Clojure напечатает вывод как {: a 1, : b 2,: c 3}.

Результаты легче читать, особенно если вы смотрите на большой объем данных.

Символы

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

Символ может содержать только буквенно-цифровые символы и ‘* +! /. : — _? ‘ но не должен начинаться с цифры или двоеточия.

Ниже приведены действительные примеры символов.

tutorial-point!
TUTORIAL
+tutorial+

Структура проекта Clojure

Наконец, давайте поговорим о типичной структуре проекта для проекта Clojure. Поскольку код Clojure выполняется на виртуальной машине Java, большая часть структуры проекта в Clojure аналогична той, что вы найдете в проекте Java. Ниже приведен снимок примера структуры проекта в Eclipse для проекта Clojure.

Основной синтаксис

Следующие ключевые вещи должны быть отмечены о вышеупомянутой структуре программы.

demo_1 — это пакет, в котором находится файл кода Clojure.

core.clj — это основной файл кода Clojure, который будет содержать код для приложения Clojure.

Папка Leiningen содержит файлы, такие как clojure-1.6.0.jar, которые необходимы для запуска любого приложения на основе Clojure.

Файл pom.properties будет содержать такую ​​информацию, как groupId, artifactId и версия проекта Clojure.

Файл project.clj содержит информацию о самом приложении Clojure. Ниже приведен пример содержимого файла проекта.