mql5言語の特徴、微妙なニュアンスとテクニック - ページ 160 1...153154155156157158159160161162163164165166167...247 新しいコメント fxsaber 2020.01.26 14:54 #1591 Alexey Viktorov: NULLはそのような曖昧なものなので、慎重に扱う必要があります。 void OnStart() { uchar Bytes[]; Print(StringToCharArray(NULL, Bytes)); // 0 Print(StringToCharArray("", Bytes)); // 1 } 繰り返しますが、入力文字列は NULL にはできません (強制的に "").他の文字列は可能です。 Maxim Kuznetsov 2020.01.26 15:05 #1592 fxsaber: 繰り返しになるが,入力文字列はNULLではありえない(強制的に "").他の文字列は可能です。 input は const とほぼ同義であり、const は初期化する必要があります。 Alexey Viktorov 2020.01.26 15:06 #1593 fxsaber: 繰り返しになるが,入力文字列はNULLではありえない(強制的に "").他の文字列は可能です。 繰り返しになりますが、なぜそのような変換があってはいけないと思うのでしょうか?私の知識と経験だけでは、すべてを説明することはできません。だから、自分の意見を貫くこと。開発者が調子に乗って変更しないことを望みます。 fxsaber 2020.01.26 15:07 #1594 Alexey Viktorov: 繰り返しになりますが、なぜそのような変換を行うべきではないとお考えなのでしょうか? なぜこのような変換が起こるのか、私にはよくわかります。ここではバグの話ではなく、機能の話をしているのです。 fxsaber 2020.01.26 15:08 #1595 Maxim Kuznetsov: input は const とほぼ同義であり、const は初期化されなければならない NULLは初期化。この例では、意図的に非入力文字列を表示しています。 Nikolai Semko 2020.01.26 20:53 #1596 fxsaber: コンパイル時に警告を発生させるのがよいでしょう。 そう、この動作は、まさに「フールプルーフ」なのでしょう。 どうやら、入力変数は 初期化されなければならないため、変数がすでにメモリ内で少なくとも1バイトを占めている場合、= NULLは 人為的に="" と同一視されるようです。 MQL5ではエントリーが。 string str=NULL; string str; は全く同じものです。変数にメモリは確保されない。とにかく、違いは見つかりませんでした。 例えばjavaでは、どちらの場合も変数にメモリが割り当てられていないにもかかわらず、このような記録は微妙に異なっている。最初の変形(String str = null;)は、初期化されたとみなされますが、変数にメモリは割り当てられず、変数は空と表示されることがあります。2番目のケース(String str;)では、その変数を表示しようとすると、初期化されていない変数のエラーが発生します。 つまり、MQL5の方がこの点では寛容です。 どっちがいいのか、自分でもわからない。 fxsaber 2020.01.26 20:58 #1597 Nikolai Semko: どうやら、入力変数を 初期化する必要があるため、変数がすでにメモリ内で少なくとも1バイトを占めている場合、= NULLを 人為的に="" と等しくしているようです。 NULLは初期化ではなく、値です。コードの途中で、constでない文字列変数にNULLを代入してもよい。そして、NULLと等しくなる。 起動時に不可視のセットファイルが作成されるため、InputはNULLと等しくならない。このファイルから変数値を入力に「パース」する。パースではNULLを出力できないので、空文字列をそこに置く。 input-stringだけがこのような動作をします。const-stringなどでは、もちろん問題ありません。 Nikolai Semko 2020.01.26 21:07 #1598 fxsaber: NULLは初期化ではなく、値です。コードの途中で、constでない文字列変数をNULLに代入することができます。そして、NULLと等しくなる。 起動時に不可視のセットファイルが作成されるため、InputはNULLと等しくならない。このファイルから変数値を入力に「パース」する。解析はNULLを全く出力しないので、そこに空文字列を置くことになる。 まあ、そういうことです。私もそう思います。 ただ、変数宣言の 段階で文字列にNULL値を代入しても意味がない。 string str1 = NULL; string str2; PRINT((str1==NULL)); // true PRINT((str2==NULL)); // true これは、すでに初期化された変数をメモリ上でゼロにするために行うことに意味があるのです。 fxsaber 2020.01.26 21:11 #1599 Nikolai Semko: まあ、そういうことなんですけどね。私もそう思います。 ただ、変数宣言の 段階で文字列にNULL値を代入しても意味がない。 は、メモリ上の変数をNULLにする場合にのみ意味があります。 #define DEFAULT_VALUE NULL string Str = DEFAULT_VALUE; if (Str == DEFAULT_VALUE) ... ここでは、NULL初期化が意味を持つ。 Nikolai Semko 2020.01.26 21:15 #1600 fxsaber: NULL初期化は、ここでは意味がある。 は 1...153154155156157158159160161162163164165166167...247 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
NULLはそのような曖昧なものなので、慎重に扱う必要があります。
繰り返しますが、入力文字列は NULL にはできません (強制的に "").他の文字列は可能です。
繰り返しになるが,入力文字列はNULLではありえない(強制的に "").他の文字列は可能です。
繰り返しになるが,入力文字列はNULLではありえない(強制的に "").他の文字列は可能です。
繰り返しになりますが、なぜそのような変換があってはいけないと思うのでしょうか?私の知識と経験だけでは、すべてを説明することはできません。だから、自分の意見を貫くこと。開発者が調子に乗って変更しないことを望みます。
繰り返しになりますが、なぜそのような変換を行うべきではないとお考えなのでしょうか?
なぜこのような変換が起こるのか、私にはよくわかります。ここではバグの話ではなく、機能の話をしているのです。
input は const とほぼ同義であり、const は初期化されなければならない
NULLは初期化。この例では、意図的に非入力文字列を表示しています。
コンパイル時に警告を発生させるのがよいでしょう。
そう、この動作は、まさに「フールプルーフ」なのでしょう。
どうやら、入力変数は 初期化されなければならないため、変数がすでにメモリ内で少なくとも1バイトを占めている場合、= NULLは 人為的に="" と同一視されるようです。
MQL5ではエントリーが。
は全く同じものです。変数にメモリは確保されない。とにかく、違いは見つかりませんでした。
例えばjavaでは、どちらの場合も変数にメモリが割り当てられていないにもかかわらず、このような記録は微妙に異なっている。最初の変形(String str = null;)は、初期化されたとみなされますが、変数にメモリは割り当てられず、変数は空と表示されることがあります。2番目のケース(String str;)では、その変数を表示しようとすると、初期化されていない変数のエラーが発生します。
つまり、MQL5の方がこの点では寛容です。
どっちがいいのか、自分でもわからない。
どうやら、入力変数を 初期化する必要があるため、変数がすでにメモリ内で少なくとも1バイトを占めている場合、= NULLを 人為的に="" と等しくしているようです。
NULLは初期化ではなく、値です。コードの途中で、constでない文字列変数にNULLを代入してもよい。そして、NULLと等しくなる。
起動時に不可視のセットファイルが作成されるため、InputはNULLと等しくならない。このファイルから変数値を入力に「パース」する。パースではNULLを出力できないので、空文字列をそこに置く。
input-stringだけがこのような動作をします。const-stringなどでは、もちろん問題ありません。NULLは初期化ではなく、値です。コードの途中で、constでない文字列変数をNULLに代入することができます。そして、NULLと等しくなる。
起動時に不可視のセットファイルが作成されるため、InputはNULLと等しくならない。このファイルから変数値を入力に「パース」する。解析はNULLを全く出力しないので、そこに空文字列を置くことになる。
まあ、そういうことです。私もそう思います。
ただ、変数宣言の 段階で文字列にNULL値を代入しても意味がない。
これは、すでに初期化された変数をメモリ上でゼロにするために行うことに意味があるのです。
まあ、そういうことなんですけどね。私もそう思います。
ただ、変数宣言の 段階で文字列にNULL値を代入しても意味がない。
は、メモリ上の変数をNULLにする場合にのみ意味があります。
ここでは、NULL初期化が意味を持つ。
NULL初期化は、ここでは意味がある。
は