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,当然也不是任何列名),并且任何非本地内容都需要明确范围。那就太好了。