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.



All Articles