PHPからClojureへ



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実装よりも遅れています。 私はインターネットを検索し、 GoPHPPythonPerlで 、Clojureの実装がさらに死んでいるのを見つけました。

この記事では、Clojureについてお話したいと思います。PHP からClojureへの英語の一連のスクリーンキャストに基づいて、PHPと比較した例を示します。

PHPとClojureは、まったく異なる2つの言語です。 Clojureを初めて見たとき、これはある種のジャンキーJSONだと思うかもしれません。 実際、Clojureは非常に強力でエレガントな言語です。

PHPと比較して、言語の多くの側面には直接の類似点があります。 他の人は、それらを正しい角度から見ると明確になります。

無名関数、クロージャとクロージャ


用語の混乱を整理するために、少し余談から始めましょう。 PHP 5.3で匿名関数とクロージャーが登場しました。 ドキュメントをよく見ると、PHPの匿名関数がClosureクラスを使用して実装されていることがわかります。 単語「クロージャー」は、順番に「クロージャー」として翻訳され、スペルがクロージュア言語の名前に非常に似ています(中央の文字jに注意してください)。 さらに混乱しないように、匿名関数には「匿名関数」という用語を使用し、変数の字句的可視性の効果には「クロージング」という用語を使用します。 Clojureには、それぞれ匿名関数とクロージャーもあります。

名前空間


PHPとClojureには多くの共通点があります。名前空間は、ファイルの物理的な場所に対応する部分で構成されています。 違いは2つだけです。Clojureでは、区切り文字はピリオドであり、名前空間は通常大文字で表記されます。

// PHP
namespace Foo\Bar\Baz;


;; Clojure
(ns foo.bar.baz)



Clojure ,
(count foo) ;; Clojure
,
count($foo) // PHP


:



! : 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) ;; 3.5

:

(+ 4 (/ 3 2)) ;; 5.5

, .


Clojure . , , .. Clojure . , .

, . , :



( PHP is):



, , :



« » — Clojure, , :






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



:



Clojure ! PHP:

$x = 4 / 3; // 1.33333...
$y = $x * 3; // 3.99999....

Clojure:

(/ 4 3) ;;  -  4/3     Ratio
(* 4/3 3) ;;  4



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.

Source: https://habr.com/ru/post/J264005/


All Articles