【ダーツ】005-オペレーター
1. 4つの操作
四則演算は、加算、減算、乗算、除算、商、剰余の 6 つの演算を含む、量間の最も基本的な論理処理です。四則演算子の左側と右側は変数であり、演算により別の変数が生成されます。
以下は、6 つの 4 つの演算子の使用のテストです。
void foo1() {
int a = 10;
int b = 3;
print(a + b); // 13
print(a - b); // 7
print(a * b); // 30
print(a / b); // 3.3333333333333335
print(a ~/ b); // 3
print(a % b); // 1
}
浮動小数点演算では精度が失われる可能性があることに注意してください。これは浮動小数点そのものの特性によるもので、どのプログラミング言語でも避けることはできません。通貨計算など、高精度の計算が必要な場合は、10 進数型またはサードパーティのライブラリを使用して処理できます。
2 番目の条件演算子
名前が示すように、条件演算子は条件を確認するために使用されます。これは従来の考え方と一致しています。条件演算子の両側には、ブール値を生成する変数が配置されます。
以下は 6 つの条件演算子の使用テストです。
void foo1() {
int a = 5;
int b = 6;
print(a > b); // false
print(a < b); // true
print(a == b); // false
print(a != b); // true
print(a >= b); // false
print(a <= b); // true
}
さらに、次のメソッドのような 2 つの数値の大きい方の値を返す三項演算子の使用もありますgetLarger
。戻り値は、2 つの数値の大きさを比較することによって決定されます。
num getLarger(num a, num b) {
bool result = a > b;
if (result) {
return a;
} else {
return b;
}
}
三項演算子は上記のコードの短縮形に相当し、式全体がオブジェクトを返します。式の構造は、?
条件と結果を分けるために を使用して 3 つのセグメントに分割されます。条件が true の場合は:
の前の値を返し、それ以外の場合は の:
後の値を返します。
num getLarger(num a, num b) {
num result = a > b ? a : b;
return result;
}
3. 論理演算子
論理演算子には、AND、OR、NOT の 3 種類があります。&&
および||
2 つのブール値を連結し、!
その後にブール値が続きます。
論理演算子の特徴は次のとおりです。
&&
: 左右の値が両方とも true の場合、結果は true になります。「そして」に似ています。たとえば、年齢が 14 歳未満で、身長が 1.4 メートル未満であるかどうかを確認します。||
: 左右の値の少なくとも一方が true の場合、結果は true になります。「または」に似ています。たとえば、年齢が 14 未満であるか、身長が 1.4 メートル未満であるかを確認します。!
: ブール値を反転します。「ない」の意味と似ています。たとえば、条件が許可されていない場合に何らかのアクションを実行します。
void foo3() {
int age = 10;
bool free = age < 12 || check();
}
bool check() {
print("call check");
return true;
}
論理演算子には「回路破壊」という特性があります。たとえば、||
演算子では、最初の条件が true である限り、後続の条件はチェックされません。これは、条件が満たされている限り、結果はすでに true であると判断されているためです。同様に、&&
演算子についても同様で、最初の値が false である限り、後続の値はチェックされません。論理演算子は人間の考え方と一致します。
4. ビット演算子
コンピュータでは、データはバイナリ形式で保存されます。ビット単位の演算子は、バイナリ ビットに対して計算を実行します。日々の開発においてビット演算子の使用シーンは多くありませんが、理解しておく必要があります。
int
例として整数型を取り上げます。整数型はメモリ内で 4 バイトを占有し、各バイト (バイト) は 8 つの 2 進数 (ビット) で表されます。たとえば、コンピュータ上の 65 と 11 のバイナリ表現は次のようになります。
十进制: 65
二进制: 0000 0000 0000 0000 0000 0000 0100 0001
十进制: 11
二进制: 0000 0000 0000 0000 0000 0000 0000 1011
&
: 左右の値のビットを演算するビット単位の AND 演算子で、対応するビットの上位と下位の数値が 1 の場合のみ結果が 1 になり、それ以外の場合は結果が 0 になります。|
: ビットごとの OR 演算子。対応するビットの上下の数値のいずれかが 1 である限り、左右の値のビットを操作します。結果は 1 になり、それ以外の場合は結果は 0 になります。~
: ビット単位の反転演算子。各桁の数値を反転します。つまり、0 に遭遇した場合は 1 を書き込み、1 に遭遇した場合は 0 を書き込みます。^
: 左右の値のビットを演算するビットごとの XOR 演算子。対応するビットの上下の数値が異なる場合のみ結果は 1 になり、それ以外の場合は 0 になります。<<
And>>
: 左側に値、右側にシフト量を指定するシフト演算子。左シフトは、2 進数を指定されたビット数だけ左に移動し、上位ビットを破棄し、下位ビットが不十分な場合は 0 を埋めることを意味します。右シフトも同様ですが、方向が逆です。
5. 代入演算子
代入演算子の構文は非常に単純です。左側は変数名、右側は変数に値を割り当てるために使用される値です。
??=
条件付き代入と同等の短縮形式 もあります。たとえば、の場合、デフォルト値として割り当てることa ??= 20
を意味します。そうでない場合は、に割り当てます。a
null
b
a
null
a
b
四則演算およびビット演算の二項演算子には、省略形である代入演算子が関連付けられています。
Dart のすべてのオペレーターの紹介は以上です。概して、これらの演算子は私たちの考え方と一致しており、理解するのに大きな問題はありません。ただし、要件を満たすためにこれらのシンボルを合理的に使用する方法は、プログラミングの過程で徐々に実現する必要があります。文字の書き方をマスターすることは第一歩であり、優秀なプログラマーになるためには、まだまだ長い道のりがあります。次に、次の段階であるオブジェクト指向プログラミングに進みます。