軟體工程師手冊/語言詞典/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 動詞實現,其引數在隱式定義的陣列中提供(句點是名稱的一部分)。這可以透過使用命名這些變數的字元陣列文字作為 = 的左引數來解包成一系列區域性變數。
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。動態連結庫使用作業系統使用的任何副檔名。其他副檔名也是可能的。
- 從小處著手,嘗試一些事情。不要過度學習
而不嘗試。不要嘗試太多事情,而不花時間學習。確保你花足夠的時間做其他事情。
- 當你開始程式設計時,隨身攜帶操作列表。
J 軟體出版物頁面上提供了一些書籍。 J 軟體出版物頁面.
這些書籍涵蓋從初學者到高階的範圍。很多都是免費下載的。有些需要購買(例如,在亞馬遜網站上鍊接到書籍)。