Clojure (クロージャーと発音)は、動的なタイピングを備えた汎用プログラミング言語であり、関数型プログラミングを奨励する、現代のLisp方言です。 言語の作成者であるリッチヒッキーは、2007年に最初に彼の作品を紹介しました。その後、言語は成熟し、2015年6月30日リリースのバージョン1.7に達しました。
言語の基本概念の1つは、既存のプラットフォームでの作業です。 Rich Hickeyは、ランタイムやガベージコレクターなどを作成しないことにしました。 -これには多くの労力が必要になります。JVM、.NET、JavaScriptなどの既製のプラットフォームを使用する方が簡単です。 現在、最も活発に開発されている2つの分野は、JVMでのClojure(それからそれほど前ではないバージョン1.7に達した人)とClojureSrcipt-JavaScriptでコンパイルしてブラウザとNode.jsで動作する言語のサブセットです。 .NETのバージョンはそれほど活発に開発されておらず、JVM実装よりも遅れています。 私はインターネットを検索し、
Go 、
PHP 、
Python 、
Perlで 、Clojureの実装がさらに死んでいるのを見つけました。
この記事では、Clojureについてお話したいと思います。PHP
からClojureへの英語の一連のスクリーンキャストに基づいて、PHPと比較した例を示します。
PHPとClojureは、まったく異なる2つの言語です。 Clojureを初めて見たとき、これはある種のジャンキーJSONだと思うかもしれません。 実際、Clojureは非常に強力でエレガントな言語です。
PHPと比較して、言語の多くの側面には直接の類似点があります。 他の人は、それらを正しい角度から見ると明確になります。
無名関数、クロージャとクロージャ
用語の混乱を整理するために、少し余談から始めましょう。 PHP 5.3で匿名関数とクロージャーが登場しました。
ドキュメントをよく見ると、PHPの匿名関数がClosureクラスを使用して実装されていることがわかります。 単語「クロージャー」は、順番に「クロージャー」として翻訳され、スペルがクロージュア言語の名前に非常に似ています(中央の文字
jに注意してください)。 さらに混乱しないように、匿名関数には「匿名関数」という用語を使用し、変数の字句的可視性の効果には「クロージング」という用語を使用します。 Clojureには、それぞれ匿名関数とクロージャーもあります。
名前空間
PHPとClojureには多くの共通点があります。名前空間は、ファイルの物理的な場所に対応する部分で構成されています。 違いは2つだけです。Clojureでは、区切り文字はピリオドであり、名前空間は通常大文字で表記されます。
namespace Foo\Bar\Baz;
(ns foo.bar.baz)
Clojure
,
(count foo)
,
count($foo)
:

! : xml- ,
if,
for :

:

, , :

Clojure! ( , Clojure, ):

, , , - -. Clojure , .
, , , :

, , .. IDE .
PHP, . !
, :

if, switch :

, , , :

:

Clojure, , ! :
Value,
Symbol List ( 100% , ).
Value () — , , :
2
"Hello, World"
#"\d+"
Symbol () — , , .. - ( Value):
def
map
db
my-symbol
List () — , (value), (symbol) (list). .. : , .
(some-symbol "Some Value" ("nested list with value" and-symbol))
Clojure!
, , ( if/else), ?
Clojure, , .
, if , , if, , . , , , :

. , , . , . , , , , .
, , .
PHP:

, ,
+, :
(+ 3 4)
— .
+ Clojure , .
:
4 + 3 / 2 = ?, , :
(/ (+ 4 3) 2)
:
(+ 4 (/ 3 2))
, .
Clojure . ,
, .. Clojure . , .
, . , :

( PHP
is):

, , :

« » — Clojure, , :

PHP, Clojure . , PHP, : Integer BitInt. , . , BigInt, M . , N .

:

Clojure ! PHP:
$x = 4 / 3;
$y = $x * 3;
Clojure:
(/ 4 3)
(* 4/3 3)
Clojure — Java . , .. - , ,
\n . , :

PHP, :

Clojure
Character — «», , . ,
\n — ,
n.
Characters, , ..:
\newline,
\tab,
\backspace.
unicode , ,
\u263a.
, :
\o003 — Ctrl+C.

# :
#"\d+". Java, Java-:
Nil nil ( Null PHP).
Bool true false. , PHP,
nil false . , 0 "" ( ) Clojure
, PHP
:

Keyword
Clojure Keyword, PHP (
if,
for ..). Keywords . — . - .
:pi —
:pi.

, ? PHP
define . , define, , - , .
, PHP
str_pad, . $pad_type : STR_PAD_RIGHT, STR_PAD_LEFT, STR_PAD_BOTH. 0, 1 2 . , 265, 1337 9000 — .
Clojure keywords
:str-pad-right,
:str-pad-left,
:str-pad-both — - , , !
, :
{:first-name "Irma", :last-name "Gerd"}
.
—
Clojure, -, :
«- Clojure» «- Clojure. 2».
Clojure PHP,
PHP vs Clojure.
FPCONF 15 2015 , - Clojure ClojureScript.