新参者が聞く!? - ページ 26

 
Alexander Bereznyak:

これはあなたの言葉です、警告はありません、しかし、本当にあります。

どんな世界に住んでいるのか、何を吸っているのか、共有すること

では、あなたは私のコードについて、それが見えないと私に代わって主張するほど大胆なのですか?キノコを間違えていませんか?
 
Dmitry Fedoseev:
それで、あなたは私のコードについて、見てもいないのに大胆に主張するのですか?キノコの間違いでは?

私はそれを得た、馬鹿ではない、あなたは警告なしで特別なコンパイラを持っている、特に個人的にMQから

PS:私も欲しいです、譲ってください。

 
Михаил:

あなたがあげたコードは、まったく正しくありません!

こんな感じでいいんじゃないでしょうか。

ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));

違いますね、それなら比較対象がありますから。

if(type==(long)POSITION_TYPE_BUY


いいえ、そんなことはありません。

これは何の関係もない。

コードライターが過剰に反応したか、どこからかタイプ変換を コピーしてきただけだ。


じつは

コード

    long type=PositionGetInteger(POSITION_TYPE);
    if (type==POSITION_TYPE_BUY) return;

は、エラーや警告を発生させない。

MQLは明示的な変換を必要としない


PS.議論を始める前に、自分の仮定を検証する。

 

は非常に悪い例です、あなたは比較で滑って、そしてエラーに遭遇する。

 
o_O:

PS.議論を始める前に、自分の仮定を検証する。

提案するときは結果を考える
 
o_O:


いいえ、そんなことはありません。

それは関係ない。

コードライターが大袈裟に反応したか、どこかからコピーしてきただけ


じつは

コード

は、エラーや警告を発生させない。

MQLは明示的な変換を必要としない


PS.議論を始める前に、自分の仮定を検証する。

o_o!

正しい - 間違っている...。

他の人が書いたものを読まないという印象です

プログラミングのルールによる。

受け入れる関数変数は、この関数の戻り値と同じ型でなければなりません!

それだ!

この推測はこれで終わりです。

なぜ、このように書かなかったのですか?

int type=PositionGetInteger(POSITION_TYPE);

なぜなら、この関数は常にLONGを返すことが分かっているからです。

そして、リファレンスには、PositionGetInteger() 関数の引数POSITION_TYPEで返される値として、次のように明記されています。

は ENUM_POSITION_TYPE であり、LONG ではありません。

そして、タイプキャスティングの練習をしたい人は、このように書きます。

int type = int(PositionGetInteger(POSITION_TYPE));

if (type==POSITION_TYPE_BUY) return;

コンパイラがエラーを出さないということは、正しく書いたということではないのです

それは、コンパイラーの「自由意志」を示すものであり、それだけなのです(LONGとINTEGERを比較することができます)。

これがRIGHTな対処法です。

 ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));
 
Alexander Bereznyak:

非常に悪い例で、比較をミスって、エラーになる。

タイプ変換でさらに、というのをどこかで見たのでしょうか? 議論の対象が違うことを指して、自分のテーゼを正当化するのはやめてください。

これはあくまで比較の話であり、この場合のみlongはenumとなります。


あなたはすでに思考の藪の中に入っている、質問は直接的であったが、それは整数で答えられた

Nextor257 です。

どのような比較なのか理解できないのですが、アドバイスをお願いします。

if(type==(long)POSITION_TYPE_BUY)

(long)の前にPOSITION_TYPE_BUYがあるのはなぜですか?


ドミトリー・フェドセーエフ

これは、変数の種類をその場で変更するものです。

 
Dmitry Fedoseev:

ENUM_POSITION_TYPEENUM_POSITION_TYPEの 代わりにlong、lonを使用。

36文字(しかも大文字)ではなく、8文字(目をつぶっても打てる)!?その上、意味のない情報もいろいろとある。これは良いプログラミングスタイルとは言えません。無駄な文章と冗長な情報です。

この場合、Mikhailの言うことは全く 正しい(Mikhailのプログラミングスタイルにはうんざりしているが)。

しかも、潜在的な警告や、ましてや文字数の問題ではなく、厳密なタイピングの 問題です。ENUM_POSITION_TYPE 列挙は、ユニークなデータ型である。longやintではなく、ENUM_POSITION_TYPEです。ENUM_POSITION_TYPEとして使用し、それ以外では使用してはならない。また、長文を入力しても、3文字目からオートコンプリート機能が働くので、全く問題ありません。また、ENUM_POSITION_TYPEがそうでないのに対して、longはほとんど何でもありなので、問題はlongを使うことにある。

o_o

MQLは明示的な変換を必要としない

最初はそうだと書いたのですが、「比較」という文字が目に入りました。実は、MQLは暗黙のうちに変換を行うので、比較の際に明示的な変換は必要ありません。そして、その結果は未定義であることが多いので、まったくやらない方がいいのです。しかし、他の通常の厳密に型付けされた言語では、常に明示的な型変換が必要である。

追伸:今回ばかりはマイケルもちゃんと答えてくれましたが、みんなここでも彼を冒涜するのに慣れてしまったようです。そして無駄に、この件では彼が正しいのだから。