2021年12月16日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 851 count

&&/||: 条件判断を高速化する切り札!

Written By: 川俣 晶連絡先

この章のテーマ §

 &&演算子と||演算子を学びます。これを使うと条件判断が高速化しますが、罠もあります。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, メソッドの基礎, bool型

解説 §

 &&演算子と||演算子は条件判断を高速化することができる機能です。

 &&演算子は左右の式はどちらもTrueなら結果がTrueになります。(AND)

 ||演算子は左右の式はどちらかがTrueなら結果がTrueになります。(OR)

 ただし、左の式を計算した時点で右の式の値に関係なく結果が決まるときは右の式を計算しません。その結果、速度は高速化します。しかし、何か実行して欲しい処理がある場合はそれが実行されないことになり、意図しない結果を出す場合があります。

 サンプルソースを見ると、A2とD2は実行されていません。これは、A1とD1の処理を行った時点で結果が決まってしまうからです。

罠の数々 §

  • ビット演算を行う&演算子と|演算子と見た目が似ているが、機能が異なるので注意しよう
  • 計算式の中で目的の計算以外の処理を実行させることがある。こういう使い方をしているとき、この2つの演算子は要注意である

参考リンク §

ブール論理演算子 (C# リファレンス)

サンプルソース: conditionalLogical §

Console.WriteLine("Case A");

if (test(false, "A1") && test(true, "A2")) Console.WriteLine("True"); else Console.WriteLine("False");

Console.WriteLine("Case B");

if (test(true, "B1") && test(true, "B2")) Console.WriteLine("True"); else Console.WriteLine("False");

Console.WriteLine("Case C");

if (test(false, "C1") || test(true, "C2")) Console.WriteLine("True"); else Console.WriteLine("False");

Console.WriteLine("Case D");

if (test(true, "D1") || test(true, "D2")) Console.WriteLine("True"); else Console.WriteLine("False");

bool test(bool x, string label)

{

    Console.WriteLine($"{label}が実行されました。");

    return x;

}

実行結果 §

Case A

A1が実行されました。

False

Case B

B1が実行されました。

B2が実行されました。

True

Case C

C1が実行されました。

C2が実行されました。

True

Case D

D1が実行されました。

True

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 こういう機能はなぜAND(両方が真)とOR(どちらかが真)にしか存在しないのだろうか。なぜ足し算や引き算には存在しないのだろうか。理由を考えてみよう。

  1. C#の設計者がうっかり追加するのを忘れたから
  2. 便利すぎる機能は人を堕落させるから
  3. マシンの性能が上がった結果、高速化を意識する必要がなくなったから
  4. 右の式も左の式も計算しないと結果が決まらない場合は全ての計算を飛ばせないから
  5. アメリカ大統領が命令したから

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2021年
12月
17日
++x/--x/x++/x--: 副作用は使いよう・こいつら実は便利だよう
3days 0 count
total 808 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2021年
12月
15日
+/-/!: 単項演算子の奥深い世界
3days 0 count
total 686 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20211216104524
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.