プログラミングでは条件分岐は必須事項と言える。その中でもif
文は極めて初歩的な段階で習得するほど重要なものと言える。ただし、その条件分岐のルールは言語によって異なる場合があるので、それが落とし穴になってしまうこともある。今回はSwiftとC言語をベースにその部分を説明したい。
まず、Swiftでは、条件分岐を行う際は、最終的にBool
型であることが必須となる ((そうでない場合はコンパイルエラーとなる)) 。つまり、必ずtrue
かfalse
かであることが絶対条件となる。従って、if XXX == true
という書き方をしても実際の動作で問題になることはない ((そもそもXXX
の返り値がBool
型でなければコンパイルエラーになる。)) 。もっとも、この記述方法は冗長なので、if XXX
で十分である ((falseであることを判定したい場合はif !XXX
またはif XXX == false
とする)) 。
C言語ではif (XXX == true)
といった書き方は極めて危険である。
これはC言語の歴史的経緯から、論理値の概念がなく、整数で代用しているという事情がある ((もっとも、C99ではstdbool.hより_Bool
型が追加されたものの、実質的には整数である。)) 。多くの実装系ではtrue
は1、false
は0
として定義されている。
ただし、条件分岐のif
文は、0か0以外かで条件を判定している ((0ならfalse、0以外ならtrue)) 。このため、開発者によっては、「0か0以外で返せばいい」という考えに至ってしまい、false/trueが保証されることがない場合もある。
こういったことから、if (XXX == true)
と書いてしまうと、XXX
の処理の返り値について、0ならfalse、0以外ならtrueであるという保証がない場合、意図した動作にならない場合がでてしまう。従って、この場合は、if (XXX)
と書かなければならない。
条件分岐は意外なところで落とし穴になるので、是非とも気をつけよう。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。