JSL: if - else -> カンマを見つけますか?こんにちは、
10 個のセミコロンのうち 1 個がカンマであるか、実際には if ブロックに属するカンマが 1 個欠落しているため、コードが機能しないという問題によく直面します。
if-else 節内のブロックをより見やすくする簡単なトリックはありますか?
高度な統計モデリング消費者および市場調査実験計画法信頼性解析Re: JSL: if - else -> カンマを見つけますか?クールでとても便利です:)
Re: JSL: if - else -> カンマを見つけますか?If() ステートメントを数式エディターに貼り付けると、すぐに見つけることができます。

Re: JSL: if - else -> カンマを見つけますか?ああ、もう一度言いますが、コードをコピー&ペーストして再配置すると、if ステートメントのどこかに間違ったカンマがあるかのように動作します。
- そして私はそれがあればいいのにと思いましたハイライト機能Jmp17ではすでに実装されています:)
うーん、まだ...
そこで、投稿内の提案に戻り、いくつかの助けを探しました。
提案を読みながら初めて私はこう思いました。それはいいですね。それらの多くは、次の問題が発生したときに助けてくれるでしょう。
さて、間違って配置されたカンマを検索すると、実際には、 @txnelsonさんの提案それを見つけるのに役立ちました:
クリック再フォーマットスクリプトそして、インデントが期待したものと一致しない場所を確認します。
非常にシンプルで、予想通りです。
一方、間違ったカンマを何度も検索していると、他の候補は次のようになります。
」カンマがあってはいけない場所にカンマがありますか?それを見つけて修正する必要があります」。
両方のアプローチを組み合わせてコードを作成するには
1) 読みやすい方法で
2) そのような再フォーマットスクリプト書式は変更されません。
を置くこともできます空行のカンマの前にもし発言。 これにより防止されます再フォーマットスクリプトカンマを前の行の末尾に移動します。残念ながら、カンマの後のコードも次の行に移動し、カンマはそのまま残ります。そのため、コードが少し「メッシュが広く」なり、読みにくくなります。 うーん。
Names Default To Here( 1 );
dt = Current Data Table();
If(
Is Empty( dt ),
Print( "no table found" );
,
N Rows( dt ) == 0,
Print( "table has no data" );
, // else
Print( "ok" )
);
自分で試してみてください:間違って配置されたカンマはどこですか
提供されたコード不安定な攻撃ただし、セミコロンがあるべき場所にカンマが含まれています。
Names Default to Here( 1 );
dt = Current Data Table();
Try(
If( Contains( dt << Get Column Names, As Name( "height" ) ),
mean = Col Mean( dt:height );
max = Col Max( dt:height );
min = Col Min( dt:height );
std dev = Col Std Dev( dt:height ),
Write( "\!NSome stats on :HEIGHT:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Contains( dt << Get Column Names, As Name( "weight" ) ),
mean = Col Mean( dt:weight );
max = Col Max( dt:weight );
min = Col Min( dt:weight );
std dev = Col Std Dev( dt:weight );
Write( "\!NSome stats on :WEIGHT:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Contains( dt << Get Column Names, As Name( "age" ) ),
mean = Col Mean( dt:age );
max = Col Max( dt:age );
min = Col Min( dt:age );
std dev = Col Std Dev( dt:age );
Write( "\!NSome stats on :AGE:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Print( "Cannot find columns 'height', 'weight', or 'age'" )
)
,
Print( "mistakes were made" )
)
もっと見る... Re: JSL: if - else -> カンマを見つけますか?こんにちは@ホギ、
これはあなたの特定の質問に対する正確な答えではありません。 しかし、Visual Studio 用のこの JSL 拡張機能は、一般的により優れたスクリプト エクスペリエンスを提供すると思います。
https://marketplace.visualstudio.com/items?itemName=VinceFaller.jmp-scripting
Re: JSL: if - else -> カンマを見つけますか?同意する@jthi , 再フォーマットは避けています。明確なスタイルガイドを用意し、コードを書くときにそれを強制するのがプログラマーとしての私の仕事です。
などの注釈
, // else
コード行数が多い場合に、視覚的なガイドを提供するのに役立ちます。
私も、コンマをメインの if ステートメントに揃えるのが好ましいスタイルだと考えています。
Re: JSL: if - else -> カンマを見つけますか?私の知る限りではありません。 現在、いくつかの変更点は環境設定のスクリプト エディター ページから確認できます。
また、カスタマイズ可能なオートフォーマッタを作成するのは最も単純な作業ではなく (少なくとも私はそう思います)、それが良いアイデアであるかどうかさえわかりません。 私は、独自の自動フォーマッタの方が一般的であり、完全にカスタマイズ可能なものよりも優れている可能性が高いと思います。 しかし、JSL には従うべきスタイル ガイドがないため、一般オートフォーマッタのベースとなる意見 (JSL は非常に小さな言語です)。
こちらはPython用の黒いオートフォーマッタに関するビデオですŁukasz Langa - Life Is Better Painted Black、または: 心配をやめて自動フォーマットを採用する方法 (youtube.com)
Re: JSL: if - else -> カンマを見つけますか?
@jthi書きました:
[再フォーマット]を正しく設定しています...
再フォーマットを設定する方法はありますか?
Re: JSL: if - else -> カンマを見つけますか?私は少し似たスタイルを使用しています@Erratic Attackただし、条件を と同じ行に分割し、ブロックが長い場合は else をコメントしてキャッチすることもあります
Names Default To Here(1);
dt = Current Data Table();
Try(
If(Is Empty(dt),
print("no table found");
, N Rows(dt) == 0,
print("table has no data");
, N Rows(dt) <= 10,
print("not enough data");
, // else
print("ok")
);
, // catch
show(exception_msg);
);
私試す通常、スクリプトを使用した後にクリーンアップする必要があるため、スクリプトが十分に長く/複雑になった後、jsl の再フォーマットを使用することを避けるためです。 たとえ再フォーマットが必要なだけ柔軟だったとしても、わざわざ適切に設定する必要はないと思います...
Re: JSL: if - else -> カンマを見つけますか?これに対する私の解決策は、重要なコンマを囲いのフェンスのレベルに置くことです。以下に例を示します。IF ブロックを区切るカンマは IF ステートメントのレベルにあり、TRY についても同じであることに注意してください。
Names Default to Here( 1 );
dt = Current Data Table();
Try(
If( Contains( dt << Get Column Names, As Name( "height" ) ),
mean = Col Mean( dt:height );
max = Col Max( dt:height );
min = Col Min( dt:height );
std dev = Col Std Dev( dt:height );
Write( "\!NSome stats on :HEIGHT:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Contains( dt << Get Column Names, As Name( "weight" ) ),
mean = Col Mean( dt:weight );
max = Col Max( dt:weight );
min = Col Min( dt:weight );
std dev = Col Std Dev( dt:weight );
Write( "\!NSome stats on :WEIGHT:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Contains( dt << Get Column Names, As Name( "age" ) ),
mean = Col Mean( dt:age );
max = Col Max( dt:age );
min = Col Min( dt:age );
std dev = Col Std Dev( dt:age );
Write( "\!NSome stats on :AGE:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Print( "Cannot find columns 'height', 'weight', or 'age'" )
)
,
Print( "mistakes were made" )
)
Re: JSL: if - else -> カンマを見つけますか?JMP はあなたを製品品質の役割に雇用する必要があります。 大好きです!
Re: JSL: if - else -> カンマを見つけますか?ご協力ありがとうございます :)
ここに願いがあります:
JSLエディターでの最適化された構文の強調表示
Re: JSL: if - else -> カンマを見つけますか?これに関するあなたの考え方、および JMP と JSL の改善に関する他の考えが気に入っています。これらを JMP ウィッシュ リストに追加することをお勧めします。そうすることで、実際に変更を加えることができる個人にあなたの意見が届くことになります。
Re: JSL: if - else -> カンマを見つけますか?うーん、私はただこう思いました:
Jmp に、あらゆる種類のグラフを 5 秒以内に生成できる素晴らしい GraphBuilder があれば、
また、複雑な If & Match 構造を 5 秒以内に分析して、構造内のエラーを見つけることもできるはずです。
「再フォーマット スクリプト」による自動インデントは優れており、コード構造の完全な階層が一目でわかります。
しかし、それは欠点でもあります。完了階層
このため、人間の目は情報を分析するのに時間がかかり、さらにそのためには脳からのサポートも必要になります。
から学べるように、「目」が脳からのサポートをあまり必要としない形式で情報をエンコードする方法があります。 @XanGregg :
プレナリー: すべてのグラフは間違っていますが、いくつかは役に立ちます - Xan Gregg
この線に沿って考えると...
A 括弧をクリックして、If ステートメントを強調表示します。とても便利です
- ただし、含まれているテキストの陰影が均一ではない場合は素晴らしいでしょう (左の図のように) - しかし意味のある方法で(右の写真のように)。
Jmp には必要な情報がすべて含まれています (インデントの調整に使用されます)。シェーディングに使用しないのはなぜでしょうか。
右側の図には、左側のくぼみから推測できない追加情報がないことは明らかです。
さらに、インデントを使用すると、複雑なコード構造の完全な階層を一目で確認できるようになります。 はい。
しかし、右の画像は非常に説得力があるように見えますよね?
編集:願いへのリンク

Re: JSL: if - else -> カンマを見つけますか?好きだったこの男がここで何を言わなければならなかったのか。
JMP はこの書式設定を気にしませんが、表示ボックスの階層を反映する方法でコードを記述する規律がなければ、すぐに混乱してしまいます。
このステートメントは表示ボックスにのみ適用されるものではなく、JSL 一般に適用されます。 私自身もまだ勉強中ですが、たとえそれが時には法医学的な演習になる場合でも、コードを論理的な部分に視覚的に構造化することは、良い時間の投資です (偶然にも、ほとんどの学習はここで行われる傾向があります)。
Re: JSL: if - else -> カンマを見つけますか?JSLウィンドウを右クリックし、「スクリプトの再フォーマット」を選択します。
これにより、ブロックが標準のくぼみに配置されます。
また、関数または行列の境界括弧 {} [] をクリックすると、一致する括弧が選択されます。
Re: JSL: if - else -> カンマを見つけますか?何が問題になるかの良い例:
x= if(<BR />// 1st test<BR /><BR /> 1==3,
1
, // 2nd test
1==5,
2,
, // others
3
)
コードを実行した後、x=...
もっと見る...(ハイライトして読んでください)
ヒント:

...エラーメッセージは表示されませんか?
ヒント:...エラーメッセージは表示されませんか?
Re: JSL: if - else -> カンマを見つけますか?皆さん、これはほぼ完璧です:

https://community.jmp.com/t5/Discussions/If-statement-comma/mp/824212/highlight/true#M100363
素晴らしい回避策
... :folded_hands: JSL エディターで最適化された構文強調表示が利用できるようになるまで。