常に else ステートメントを使用する理由と、空の値と欠損値の基本的な違いやあみんな、
ここで少し理論的な質問があります。 私は現在、同僚向けに JSL スクリプトのチュートリアルを書いているので、JSL の仕組みをよく理解できるように努めています。
かつてフォーラムで、たとえ Empty() を 'Else' ステートメントとして追加することを意味するとしても、'If' ループ内では常に 'Else' ステートメントを使用する必要があると読んだことがあります。
違いを確認するために、スクリプト エディターを試してみました。
y=if(1>2, 1);
z= if (1>2, 1 , Empty());
Show (y);
Show (z);
Show (Is Missing (y) );
Show (Is Missing (z) );
Show (Is Empty (y) );
Show (Is Empty (z) );
x= If (y==z, "true", "false");
Show (x); <BR /><BR />// results :<BR />y = .;<BR />z = Empty();<BR />Is Missing(y) = 1;<BR />Is Missing(z) = 1;<BR />Is Empty(y) = 0;<BR />Is Empty(z) = 1;<BR />x = .;
したがって、値 Empty() は欠損値であり空の値ですが、「.」です。が欠落していますが、空ではありません。 それはどんな違いを生むのでしょうか? どちらも比較演算子で使用すると欠損値を返すという事実を考えると、なぜわざわざ Empty() を 'Else' ステートメントとして使用する必要があるのでしょうか。
これは、if ステートメントでテストされた条件が欠落を返した場合、それは true でも false でもないため、ループは 2 つのステートメントのどちらも返さないという事実も示しています。これは常に念頭に置いておくとよいでしょう。
Re: 常に else ステートメントを使用する理由と、空の値と欠損値の基本的な違いFWIW ELSE 条件がない場合は、ELSE ステートメントを使用しません。コードをシンプルかつタイトに保ちます。私は if() が関数であることを認識しており、それ自体の使用方法を知っています。もしかしたら、私が使ってきた他の言語の名残なのかもしれません。
Re: 常に else ステートメントを使用する理由と、空の値と欠損値の基本的な違い私は、コンピューター プログラミング全般、特に JMP スクリプトが深刻なテーマであることに同意します。 スクリプトを保存したり、他の人が書いたスクリプトをハッキングしたりしても、限界はあります。 通常、混乱とフラストレーションが生じます。
申し訳ございませんが、弊社のトレーニングはオプションではございません。 私たちの入門コースは成熟しており(約 20 年)、好評を博しています。 私は、無料か有料かを問わず、JSL のための他のトレーニングを知りません。 特定のトピックを取り上げた無料のビデオもいくつかあるかもしれませんが、それらが考え方を伝えているとは思えません。 それらは通常、「ハウツー」または「料理本」スタイルです。
おそらく他のコミュニティ メンバーがあなたに合ったトレーニングを知っているかもしれません。
Re: 常に else ステートメントを使用する理由と、空の値と欠損値の基本的な違い確かに、制限的な考え方をすることで自分の創造性を制限したくありません。 おそらくこの分野での訓練が不足していると思います。 私は数か月前に JSL でのスクリプト作成を行いました。主に既存のスクリプトを反復処理し、スクリプト インデックスとスクリプト ガイド PDF を確認しました。 JSL の可能性を解き放ちたいのであれば、もう少し本格的なものが必要だと今は思います。
JSL を学習するための (無料) オンライン リソースをご存知ですか? あなたはスタッフのメンバーであり、あなたの会社は有料コースを提供しているため、これが難しい質問かもしれないことは承知していますが、現時点ではこれは私にとって選択肢ではありません。
Re: 常に else ステートメントを使用する理由と、空の値と欠損値の基本的な違いあなたはいくつかの大きな質問をします。
私の基本的なポイントは、他のコンピューター プログラミング言語と同様、JSL 構文とイディオムは私たちの友人ではありますが、それらの奴隷ではないということです。 私の質問「何を期待していますか?」これは、コードを作成または変更するたびに、この質問に対する答えが必要であることを指摘することのみを目的としていました。 明確な答えはコードに大きな違いをもたらします。
はい、関数はスクリプトを記述するための重要な要素です。 定義上、すべての関数は結果を返します。 しかし、返される結果よりも、関数の副作用に興味がある場合があります。 たとえば、V List Box() 関数は、作成した表示ボックス オブジェクトへの参照を返します。 私はリファレンスよりもボックス自体 (副作用) に興味があるかもしれません。
初心者のスクリプト作成者の多くは、If() と For() をステートメントまたはコマンドだと考えています。 それらは関数です。 ステートメントの考え方があなたの創造性を制限する可能性があります。 考え方が重要です。 次のスクリプトは、同じことを達成するための 2 つのアプローチを示していますが、2 番目のアプローチはステートメントの考え方を持つ人には決して思いつきません。
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
mean weight = Col Mean( dt:weight );
// assign within the If() function call
dt << New Column( "Condition 1", Numeric, Continuous );
For Each Row(
If( :weight < mean weight, dt:Condition 1 = -1, dt:Condition 1 = 1 );
);
// assign with the returned result from the If() function call
dt << New Column( "Condition 2", Numeric, Continuous );
For Each Row(
dt:Condition 2 = If( :weight < mean weight, -1, 1 );
);
Re: 常に else ステートメントを使用する理由と、空の値と欠損値の基本的な違いこんにちは、マークベイリーさん
これらの洞察をありがとう:)確かに、Empty() を else ステートメントとして使用しなければならないのは奇妙だと思いました。 この実践について言及した投稿を探してみましたが、もう見つかりません。そのため、ユーザーにこれが役立つ理由を尋ねることはできません。
あなたの質問への答え: 条件付き If() 関数を使って何をしようとしていますか? それは何を返してくれると思いますか?
JSL は関数ベースの言語であり、関数は値を返すということを忘れがちです。 したがって、通常は、If ステートメントが返すものを実際には使用しません。 私は JSL の基本を理解する方法としてこれを探求しただけです。 実際のところ、If ステートメントからの戻り値を使用することに何の意味があるのでしょうか?
私が思いつくのは、スクリプト内のスペースを増やすか、スクリプトを少し速くすることだけです。 しかし、そのように賢く行動しようとすると、後でそれが戻ってきて悩まされ、エラーやバグが発生するような気がします。
これについてどう思いますか?
Re: 常に else ステートメントを使用する理由と、空の値と欠損値の基本的な違いIs Empty() を使用する方法は、変数が割り当てられたことがあるかどうかを確認することです。したがって、次の構文エラーが回避されます。
names default to here(1);
show(z);
変数「z」が参照されたことがあるかどうかを確認できます。
Names Default To Here( 1 );
If( Is Empty( z ) == 0,
Show( z )
);
より良い例は以下のとおりです。
Names Default To Here( 1 );
x=1;
If( x > 2, z = 7 );
If( Is Empty( z ) == 0,
Show( z )
);
JSL はインタープリタ型言語であるため、JSL のロジック フローに従います。つまり、x <= 2 の場合、JSL は z = 7 を実行しません (調べさえしません)。そのため、z が Empty() であるかどうかを確認することはありません。 JSL では構文エラーが発生するため、必須です。
あなたの例では、z に値を代入する別の形式を使用しています。
names default to here(1);
z=(if(1>2, 7));
show(z);
1>2 の場合、変数 z は値 7 をとりますが、そうでない場合、z は割り当てられていないので、欠損値「.」をとります。ここでの利点は、割り当てが行われると、JSL が変数 z を処理しており、後でプログラム フローで z が参照されても構文エラーが発生しないことです。
ここで、If() 関数で false が返された結果として Empty() を割り当てるべきかという問題が生じます。
names default to here(1);
z=(if(1>2, 7, Empty()));
show(z);
つまり、z を欠損値として持たずに、Is Empty() と Is Missing() をチェックするかどうかということになります。個人的には、欠損値ルートの方が好きです。これは、z が割り当てられていないことの検証として Empty() を残すためです。 。
Re: 常に else ステートメントを使用する理由と、空の値と欠損値の基本的な違い私は他の人よりも長くスクリプトを書いてきました (1998 年)。 私はすべてのスクリプト コースの著者であり、教えています。 「else」条件の引数を常に含めるか、または使用することを推奨する「ベスト プラクティス」を知りません。空特定の戻り値がない場合。 もちろん、私はそれを見逃したり、使わなかったためにお金を払ったりしたことはありません。 この問題もまた「場合による」のケースだと思います。 条件付きで何をしようとしていますかもしも()関数? それは何を返してくれると思いますか?
のデフォルトの戻り値は、もしも()関数はない最初の引数が false と評価され、引数が 2 つだけの場合。 に格納された値を使用してこの動作を実証しました。 y 。 のもしも()関数は、2000 年に JSL が JMP 4 に初めて導入されて以来、そのように動作してきました。
3 番目の引数を指定できます。もしも()最初の引数が false と評価された場合に評価されて返される関数。 に格納された値を使用してこの動作を実証しました。 zあなたが提供した場所空()関数を 3 番目の引数として指定します。
ないは未知の値を表します。 ほとんどの場合、未知のデータ値、または Log( -1 ) などの不可能な数値式の評価結果を表します。 私はそう思いますない引数で表されない条件のデフォルトの戻り値として非常に意味があります。
空それだけです。 そこには何もない状態を表します。 たとえば、次のように電話すると、現在のデータテーブル()データテーブルが開いていない場合、引数なしで返されます。空。