JSL 忽略名稱的空格,大多數人不會利用這一點!這不是一個重要的問題,但我經常想知道為什麼。
在我的公司裡,有許多 JSL 的臨時腳本編寫者和一些重量級腳本編寫者。我是其他人代碼的貪婪消費者(閱讀),並且閱讀了這裡 20 多人的大量代碼。另外,我在社區論壇上看到了許多發布的程式碼範例。
我發現程式碼作者幾乎普遍沒有利用 JMP 忽略名稱中的空格和大小寫的奇怪決定。以下是一些範例。
似乎大多數人都使用內建函數——例如插入() -- 使用空格,但對於使用者定義的名稱通常選擇不這樣做。
我的主要問題是為什麼?我發現使用空格時,程式碼的閱讀速度要快得多,就像一般寫作一樣。
當有人來自傳統程式語言時,我可以理解,但我在工作中看到很多人都是第一次編寫腳本,他們通常會做同樣的事情(使用空格作為內建名稱,而不是使用空格)使用者定義的名稱的間距)。
就我個人而言,我非常欣賞 JSL 提供的名稱靈活性,但我很好奇這裡其他人的想法。
例子:
從@drewfoglia在這個郵政:

從@菲爾_布朗在這個郵政:

文件libRecall_v2_0.jsl經過@邁克D_安德森
這是我的程式碼的摘錄——我在名稱中廣泛使用空格:

自動化和腳本編寫回覆:JSL 忽略名稱的空格,大多數人不會利用這一點!我想當我開始編寫 JSL 時,我立即選擇退出 JMP 讓您設定名稱的所有方式,很可能是因為我不太信任它,而且感覺很奇怪(我有一些 javascript 和 Python 背景,但我沒有當時任何語言都沒有任何合適的程式風格)。
現在我做在編寫 JSL 時經常使用程式碼重新格式化,它會為 JMP 名稱添加空格(因為我啟用了在運算符名稱中插入空格)。 在我的名稱中,我不使用空格(我大致遵循 JSL 的某種 Python 樣式指南),這確實(有時)幫助我將我自己的名稱與 JMP 創建的名稱分開。
回覆:JSL 忽略名稱的空格,大多數人不會利用這一點!嗯——我不能代表其他人,但就我而言,這主要是習慣。 早在我開始使用 JSL 之前,我就使用 Basic、VB、LaTeX 和 Mathematica 進行編碼。 所有這些語言都對空格有限制。 對我來說,重新掌握一種語言的技能是沒有意義的,因為這會讓我更難重新學習其他語言或進入新的語言(就像我在封鎖期間學習 Python 時一樣)。
回覆:JSL 忽略名稱的空格,大多數人不會利用這一點!從 JSL 切換到 Python / JavaScript 時我確實遇到了很多問題!如果您花費大量時間在語言之間切換,那麼盡可能保持統一的格式確實有意義。
回覆:JSL 忽略名稱的空格,大多數人不會利用這一點!關於此的另一個想法 - 由於內建變數(公式等)在 JSL 編輯器中內建了語法突出顯示,因此很容易看出它們是特殊的。 對於使用者定義的內容 - 很難判斷一個或兩個變數之間可能缺少分號。 這將使較長腳本和應用程式的偵錯變得更加困難。
回覆:JSL 忽略名稱的空格,大多數人不會利用這一點!您對列名稱的看法是正確的——它們與大多數 JSL 名稱的名稱結構並不嚴格匹配。很高興聽到 JMP18 的新功能 - 我一定會經常使用它!
JMP 列名稱的另一個問題如果能夠解決,那就太棒了——它們優先於本地/此處名稱。在此處的範例腳本中,我無法使用此處的名稱“device”,因為它與小表中的列具有相同的名稱。
JSL 應該有嚴格的列引用模式,僅允許透過明確作用域存取列(在列公式之外)。那會是一件好事...
Names Default to Here( 1 );
device = "ABC";
dt = New Table( "test",
<<NEW column=""></NEW>
回覆:JSL 忽略名稱的空格,大多數人不會利用這一點!嗯,在投入 2 個小時調試腳本,然後發現連接有時會區分大小寫之後,您會開始想知道為什麼“Age”列可能與“age”列和“age”列不同:
(c) @jthi來自data-table-message-column-exists-colname
看更多...Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt:age << set name("a g e");
dt:age[1] = 999;
Show(Column(dt, "age")); //Column(dt, "age") = Column("a g e");
Show(dt:age[1]); //dt:age[1] = 999;
dt << New Column("age", Numeric, Ordinal);
Show(Column Name(2) == Column Name(6)); // Column Name(2) == Column Name(6) = 1; // Columns don't need unique names?
Show(Column(dt, "age")); //Column(dt, "age") = Column("age");
dt:age[1] = 9999;
Show(dt:age[1]); //dt:age[1] = 9999;
wait(1);
dt << Delete Column("age");
Show(Column(dt, "age")); //Column(dt, "age") = Column("a g e");
Show(dt:age[1]); //dt:age[1] = 999; 這是我決定遵守一條規則的時候:)
不過,很快就會變得容易一些:
透過dt << Has Column(),使用者將可以檢查列 - 並選擇匹配是否必須精確或具有一定的自由度:

回覆:JSL 忽略名稱的空格,大多數人不會利用這一點!也許這裡的問題是不可能將字串寫入列,而只能寫入單元格:
Names Default to Here( 1 );
dt = New Table( "test",
Add Rows( 1 ),
New Column( "DEVICE", Character)
);
device = "TOOL1";
dt:device[1] = device;
回覆:JSL 忽略名稱的空格,大多數人不會利用這一點!是的,如果本地名稱和列具有相同的名稱,那麼並行使用兩者會很有趣:
Names Default to Here( 1 );
xxx = "device";
dt = New Table( "test", add rows(10), New Column( "DEVICE", set each value (random integer(20))),
New Column( "VALUE", set each value (1))
);
device = "value";
Print(device);
distribution of DEVICE = Distribution( Continuous Distribution( Column( device ) ));
distribution Of VALUE = Distribution( Continuous Distribution( Column( Eval(device )) ));
another distribution of DEVICE = Distribution( Continuous Distribution( Column( "device" ) ));
:value << set formula(device);
wait(3);
:value << set each value (device)
總共有 13 條規則 + 一些例外!
https://www.jmp.com/support/help/en/17.1/?os=win&source=application#page/jmp/rules-for-resolving-names.shtml
回覆:JSL 忽略名稱的空格,大多數人不會利用這一點!有很多規則,但最好在 JSL 中有一個標誌來打開嚴格模式,這樣無作用域的名稱就被強制為本地的(例如,僅檢查本地作用域,而不是 HERE,而不是 GLOBAL,當然不是任何列名),並且任何非本地的內容都需要明確限定範圍。那太好了。