タグ: 三項演算子

  • 【知らなきゃ損】三項演算子が便利って話

    【知らなきゃ損】三項演算子が便利って話

    皆さん、こんにちは。すなです。

    最近、エンジニアをしていて「やっぱりプログラミングって楽しいなぁ」とつくづく感じる日々です。

    今日はそのプログラミングの技術的なお話。

    要はif-else構文と同じ

    エンジニアの皆さん、変数に何かを代入するときにif-elseで場合分けして代入するみたいなシチュエーション、よくありませんか?

    文章だけだと分からないので下の例を。

    $result = file_get_contents($file_path);
    if ($result) {
      $announce = "ファイルを取得しました";
    } else {
      $announce = "ファイルがありません";
    }
    echo $announce;

    これはfile_get_contentsというurl先のWebページの内容を取得できるPHPの関数です。返り値として読み込んだデータを返し、失敗した場合はFALSEを返します。

    したいことに対してコードが多過ぎる

    これ$announceに文字を代入したいだけなのに、控えめに言って無駄が多過ぎますよね?

    変数に文字列を代入するために、if-else構文で3行使ってますし、変数に文字列を代入するほぼ一緒のコードが2回出てきます。

    三項演算子を使おう

    そんな時は今回ご紹介する「三項演算子」を使いましょう。

    さっきと同じコードを三項演算子を使って書いてみます。

    $result = file_get_contents($file_path);
    $announce = $result ? "ファイルを取得しました" : "ファイルがありません";
    echo $announce;

    見てください、この収納の良さ。それでいて綺麗ですね。

    三項演算子に初めて触れる方は何をしてるかさっぱり分からないかも知れませんね。実は大したことないので、解説します。

    条件式 ? trueのとき : falseのとき

    もう答え書いちゃいました。そういうことです。

    すみません、ちゃんと解説しますね。

    $condition = true;
    $result = $condition ? "これはtrueです" : "これはfalseです";
    echo $result;
    // これはtrueです

    条件式

    最初に条件式を書きます。ここがtrueかfalseになります。上記の例で言うと$conditionの位置が条件式で、これの中身を判定します。

    ? true

    条件式のあとに「?」を書いて、その次に条件式がtrueだったときに返す値を入れます。上記の例は$conditionがtrueのとき、「これはtrueです」を返します。

    : false

    そのあとに「:」を続けて、今度は条件式がfalseだったときに返す値を入れます。上記の例は$conditionがfalseのとき、「これはfalseです」を返します。

    さっきの例全体としては、$conditionがtrueなので三項演算子は全体として「これはtrueです」を返します。それが「$result = 」と繋がっているので、$resultに「これはtrueです」が代入されます。

    もちろん$condition === falseのときは$resultに「これはfalseです」が入ります。

    他の例

    他にも例を見てみましょう。

    $age = 18;// 自分の年齢
    $alcohol = 20 < $age ? "最初の一杯は?" : "飲酒は二十歳になってから";
    print $alcohol;
    // 飲酒は二十歳になってから

    $ageに皆さんの年齢を代入してみてください。そのあと、三項演算子の「条件式」のところで真偽を判定します。例の場合は、「20 < $age」がfalseなので、$alcoholには「飲酒は二十歳になってから」が代入されます。


    // 入力されたパスワードが合っていたとして
    echo $password === $_POST["password"] ? "ログインしました" : "パスワードが間違っています";
    // ログインしました

    これはformタグから入力されたパスワードを判定して、ログインするかしないかを返します。三項演算子自体が文字列を表すので、echoで直接出力すると結果が表示されます。