軟體工程師手冊/語言詞典/J
J 不是 Java。它是 APL 的 ASCII 後代。以下是維基百科條目
截至本文撰寫時,該軟體是免費的,可在 J 軟體頁面 上獲取
J 是一種面向陣列的函式式語言。
入口點的概念在 J 中並不真正適用。程式本身就是入口點。
J 語句
J 語句以換行符結尾。例如
a=: b
J 註釋以偽標記 NB. 開頭,並持續到行尾。沒有提供塊註釋,但文字文字可以用作此角色。例如
noun define This is some descriptive text, which may go on for a number of lines, and which needn't follow J's syntactic rules. )
注意,單獨一行上的單個右括號會結束多行定義。
變數透過指定其定義來宣告。文字數字陣列可以透過在數字之間放置空格來引入。文字字元陣列可以透過在單引號之間放置多個字元來引入
x=: 1 plus=: + x plus 2 3 5 7
3 4 6 8
'Hello world!'
Hello World!
J 中有兩個定義詞。
=:
實現具有全域性範圍的定義。
=.
實現具有區域性範圍的定義。
但是,請注意,在類和物件的上下文中,全域性範圍實際上意味著類範圍或物件範圍。J 中“類或物件”的一般術語是“locale”(注意與“local”的拼寫略有不同)。大多數方法都是作為 J 動詞實現的,其引數在隱式定義的陣列 y 中可用。(句點是名稱的一部分)。這可以透過使用命名這些變數的字元陣列文字作為 = 的左引數來解包為一系列區域性變數。
foo=: verb define
'arg1 arg2 arg3'=. 3{.y.
'the last line a method specifies the result'
)
參見 變數宣告
由於 J 是一種面向陣列的語言,大多數 J 程式設計師使用資料選擇來實現條件邏輯。雖然這不是大多數語言的傳統功能,但 SQL 程式設計師經常使用類似的技術。
但是,J 也在定義動詞的主體中提供了更傳統的 if. 語句。
if. 1 = x then. y=: y + 3 end.
這些條件詞本身不是語句語法的一部分,因此可以跨多行傳播。
if.
2 = y
then.
z=: bar 99
a=: bagle * mayo
else.
b=: 1 2 3 4
end.
由於 J 是一種面向陣列的語言,因此每個操作都能夠遍歷任意維陣列。因此,迴圈可以在任何表示式中隱式發生。
x + y
將遍歷所有適當的值,只要 x 和 y 的定義一致即可。
2 3 4 + 10 100 1000
12 103 1004
此機制可以透過指定操作的秩來配置,雙引號字元用在此角色中(雙引號字元在 J 中不會分隔字串,並且通常雙引號會單獨使用,而不是成對使用)。
但是,在定義動詞的主體中,更傳統的控制詞以類似於條件語句的方式可用
while.
x < 100
do.
x=: x+1
blah, blah, blah
end.
在大多數情況下,您應該使用 J 的隱式迴圈。例外情況是並非所有資料都可以在一個時間點知道,例如在服務 IO 時。但是,即使在那裡,使用 J 的事件處理而不是顯式迴圈可能也是明智的。
對於許多目的,不需要顯式輸出語句。J 通常在計算器模式下使用,結果隱式顯示。
但是,檔案輸出也是可能的,使用符號 1!:2(這可以認為是庫 1,入口點 2)。通常,這將被分配一個助記符名稱
fwrite=: 1!:2
J 使用自己的編號系統輸出描述符,標準輸出是描述符 2。(同樣,檔案讀取是 1!:1,標準輸入是描述符 1。)
在檔案 io 的一般上下文中,必須顯式指定換行符,但標準輸出始終在結尾處包含隱式換行符。在 unix 下,寫入 /dev/tty 以避免隱式換行符。
'Hello world!' fwrite <'/dev/tty'
('Hello world!',LF) fwrite <'/dev/tty'
注意,左尖號不代表重定向,而是代表將整個陣列 '/dev/tty' 視為單個專案而不是字元序列。
所有 J 名詞(資料)都是具有多個維度(至少 0 個)的陣列。左尖括號用於封裝這些陣列中的一個。此操作稱為裝箱,它反映了這些結果的顯示方式。
< i. 3 4 +---------+ |0 1 2 3| |4 5 6 7| |8 9 10 11| +---------+
一些基本的演算法釋出在 http://www.jsoftware.com/books/help/phrases/contents.htm
一般來說,演算法是人們使用這種語言(或者任何語言)來實現的,因此這是一個開放性的話題。
垃圾收集是自動的。
J 程式通常使用 .ijs 副檔名。類定義通常使用 .ijc。動態連結庫使用作業系統使用的任何副檔名。其他副檔名也是可能的。
- 從小處著手,嘗試一些東西。不要學習太多
在嘗試之前。不要嘗試太多東西而沒有花時間學習。確保你花足夠的時間做其他事情。
- 在你開始程式設計時,隨身攜帶操作列表。
- The J 軟體頁面
- The wikipedia 條目 包含操作列表。
在 J 軟體出版物頁面 提供了許多書籍。
這些書籍涵蓋了從初學者到高階的各個方面。許多書籍可以免費下載。有些需要購買(例如,亞馬遜網站上有連結到這些書籍的連結)。