【Dart / Flutter】演算子まとめ

# 論理演算子

<table>
        <thead>
            <tr>
                <th>論理演算子</th>　<th>解説</th>
            </tr>
        <thead>
        <tr>
            <td>+</td>　<td>加算</td>
        </tr>
        <tr>
            <td>-</td>　<td>減算</td>
        </tr>
        <tr>
            <td>/</td>　<td>除算</td>
        </tr>
        <tr>
            <td>~/</td>　<td>除算(小数切り捨て)</td>
        </tr>
        <tr>
            <td>%</td>　<td>剰余</td>
        </tr>
        <tr>
            <td>*</td>　<td>乗算</td>
        </tr>
</table>

```dart
print(1 + 1); // 2
print(3 - 2); // 1
print(10 / 3); // 3.33333...
print(10 ~/ 3); // 3
print(10 % 3); // 1
print(4 * 3); // 12
```

# 比較演算子

<table>
        <thead>
            <tr>
                <th>比較演算子</th>　<th>解説</th>
            </tr>
        <thead>
        <tr>
            <td>==</td>　<td>イコール</td>
        </tr>
        <tr>
            <td>!=</td>　<td>ノットイコール</td>
        </tr>
        <tr>
            <td><</td>　<td>大なり</td>
        </tr>
        <tr>
            <td>></td>　<td>小なり</td>
        </tr>
        <tr>
            <td><=</td>　<td>大なりイコール</td>
        </tr>
        <tr>
            <td>>=</td>　<td>小なりイコール</td>
        </tr>
</table>

```dart
double number = 10;
print(number == 10); // true
print(number != 10); // false
print(number < 10); // false
print(number > 10); // false
print(number <= 10); // true
print(number >= 10); // true
```
# 論理演算子

<table>
        <thead>
            <tr>
                <th>論理演算子</th>　<th>解説</th>
            </tr>
        <thead>
        <tr>
            <td>&&</td>　<td>And</td>
        </tr>
        <tr>
            <td>||</td>　<td>OR</td>
        </tr>
        <tr>
            <td>!</td>　<td>NOT</td>
        </tr>
</table>

```dart
int number = 20;
print(0 <= number && number >= 30); // false
print(0 <= number || number >= 30); // true
print(!(number == 10)); // true
```

# 代入演算子

<table>
        <thead>
            <tr>
                <th>論理演算子</th>　<th>解説</th>
            </tr>
        <thead>
        <tr>
            <td>=</td>　<td>代入</td>
        </tr>
        <tr>
            <td>+=</td>　<td>加算代入</td>
        </tr>
        <tr>
            <td>-=</td>　<td>減算代入</td>
        </tr>
        <tr>
            <td>/=</td>　<td>除算代入</td>
        </tr>
        <tr>
            <td>%=</td>　<td>剰余代入</td>
        </tr>
        <tr>
            <td>*=</td>　<td>乗算代入</td>
        </tr>
</table>

```dart
double number = 2;

number = 3;
print(number); // 3.0

number += 2;
print(number); // 4.0

number -= 3;
print(number); // -1.0

number /= 2;
print(number); // 1.0

number %= 3;
print(number); // 2.0

number *= 4;
print(number); // 8.0
```

# 型テスト演算子

<table>
        <thead>
            <tr>
                <th>型テスト演算子</th>　<th>解説</th>
            </tr>
        <thead>
        <tr>
            <td>as</td>　<td>型変更</td>
        </tr>
        <tr>
            <td>is</td>　<td>型確認(左辺の方が右辺だった場合真)</td>
        </tr>
        <tr>
            <td>is!</td>　<td>型確認(左辺の方が右辺ではなかった場合真)</td>
        </tr>
</table>

```dart
int number = 20;
print(number as double) // Exception 
print(number is double); // false
print(number is! double); // true
```

# 条件演算子

<table>
        <thead>
            <tr>
                <th>条件演算子</th>　<th>解説</th>
            </tr>
        <thead>
        <tr>
            <td>? : </td>　<td>三項演算子<br>条件 ? 条件が真の場合の処理 : 条件が偽の場合の処理</td>
        </tr>
</table>

```dart
String text = "条件演算子";
text == "条件演算子" ? print(true) : print(false); // true
text != "条件演算子" ? print(true) : print(false); // false
```

# その他

<table>
        <thead>
            <tr>
                <th>演算子</th>　<th>解説</th>
            </tr>
        <thead>
        <tr>
            <td>??</td>　<td>Null結合演算子<br> 対象のデータがNullだった場合に、??以降の処理を通過する</td>
        </tr>
        <tr>
            <td>..</td>　<td>カスケード演算子<br>一つのオブジェクトに対して、複数のメソッドを連続して呼び出すことが可能</td>
        </tr>
</table>

```dart
// Null結合演算子
String? text;
print(text ?? 'Null結合演算子'); // Null結合演算子

// カスケード演算子
List<int> evenNumberList = [10, 8, 6, 4, 2];
print(evenNumberList
  ..add(12)
  ..sort((a, b) => a.compareTo(b))); // [2, 4, 6, 8, 10, 12]
```