オペレータのリロードと暗黙的な変換の思考
1224 ワード
仕事を始めたばかりの頃から、C++のオペレータの重荷や暗黙的な転換を批判する人が多く、私もずっと明示的に呼び出しを続けていましたが、最近C++関連のライブラリを見てみると、実はこの2つはそんなに怖くなく、逆にいくつかの面で完璧に近い銀弾でした!
iOS開発にはアルゴリズムを記述する
sqlでは、
Objcでは、多くのapiがうるさいので、良いことを言って意味を表すことができますが、簡単なことでコードが複雑になることが多いです.例:
デフォルトのいくつかの方法では、認知上の曖昧さは生じません.
現在、多くの計算はCPUで実行されるのではなく、機械学習や画像レンダリングなどのGPUで実行される必要がある.では、GPUの演算方式をどのように定義しますか?有名なOpenGLは自分のGLSL言語を定義し、iOSのCIImageも似たような言語を定義しています.しかし、これらには同じ問題があります.それは、実行期間がコンパイルされ、実行され、コンパイラで問題が発見されないことです.コンパイル期間を置くには、言語の特性を利用する必要があります.最も簡単なベクトル演算でオペレータを再ロードできない場合は、最も簡単な演算
したがって、場合によっては、このような特性を利用することは非常に便利であり、コードの可読性も向上する.
iOSの一部のライブラリでは、
もちろん、ここで言う利点は、劣勢がないわけではありませんが、このような特性をうまく利用することで、可読性を向上させることができます.
iOS開発にはアルゴリズムを記述する
NSPredicate
があり、このクラスの使用方法については、かなり複雑である.sqlでは、
a > b AND a < 100
のような複雑な判断論理があるが、これらは厳密なタイプ制限ではなく、a
が時間タイプである場合、< 100
という条件は無効または未知の行為である可能性がある.実行中にこの問題を発見することはできますが、コンパイル期間中にこのような問題を発見することはできません.C++は上記の問題をうまく解決することができ、厳格なタイプ判定といくつかのタイプ変換があります.Objcでは、多くのapiがうるさいので、良いことを言って意味を表すことができますが、簡単なことでコードが複雑になることが多いです.例:
[string stringByAppendingString:@"string"];
[a isEqualToString:b];
デフォルトのいくつかの方法では、認知上の曖昧さは生じません.
string + "";
a == b;
現在、多くの計算はCPUで実行されるのではなく、機械学習や画像レンダリングなどのGPUで実行される必要がある.では、GPUの演算方式をどのように定義しますか?有名なOpenGLは自分のGLSL言語を定義し、iOSのCIImageも似たような言語を定義しています.しかし、これらには同じ問題があります.それは、実行期間がコンパイルされ、実行され、コンパイラで問題が発見されないことです.コンパイル期間を置くには、言語の特性を利用する必要があります.最も簡単なベクトル演算でオペレータを再ロードできない場合は、最も簡単な演算
vec2 = vec1 * 2 + 2
を記述することも災難的です.したがって、場合によっては、このような特性を利用することは非常に便利であり、コードの可読性も向上する.
iOSの一部のライブラリでは、
realm
やwcdb
などの特性が利用されています.もちろん、ここで言う利点は、劣勢がないわけではありませんが、このような特性をうまく利用することで、可読性を向上させることができます.