PHPしか知らない僕がPythonを少し触ってみたよ 〜スイッチはどこさ?〜

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
岐路は常にあなたの前にあり

この記事を三行にまとめると

if文とかswitch文とかです
Pythonにはswitch文がありません
if文さえ押さえときゃオッケーって感じ?
今日は分岐処理について見ていきやす。分岐処理ってのはif文とかswitch文とかです。

とりあえず順番にやってみましょう。



if文の基本

まずはif文から。簡単なif文を書いてみます。

//PHP
$i = true;
if($i == true) {
  echo 'True';
}

#Python
i = True
if i == True:
  print('True')

これが基本的なif文の書き方になります。大きな違いはないですね。しいて言えばPythonの方は条件式のところにかっこがいらないってことですかね。つけてもエラーにはならないです。

ネスト構造の書き方については前に書いたのでここでは詳しくは説明しません。

「ネストのリンク」



elseがある場合

今度はelseをつけてみます。

//PHP
$i = true;
if($i == true) {
  echo 'True';
} else {
  echo 'False';
}

#Python
i = True
if i == True:
  print('True')
else:
  print('False')

これもそこまで大きな違いはないですかね。



elseifがある場合

では次はelseifをつけてみましょう。

//PHP
$i = 1;
if($i == 1) {
  echo 'One';
} else if($i == 2) {
  echo 'Two';
} else {
  echo 'Other';
}

#Python
i = 1
if i == 1:
  print('One')
elif i == 2:
  print('Two')
else:
  print('Other')

elseifになると少し書き方が変わってきます。PHPだと「else if」と書くのに対し、Pythonは「elif」とちょい省略された感じになります。



andとorについて

if文を書くとき、andやorを使って複数の条件を定義することがあります。

例えば「変数の数字が0以上10以下」という条件式を書くとき。PHPだと以下の二種類の書き方があります。

$i = 1;
if($i >= 0 && $i <= 10) {
  echo $i;
}

$i = 1;
if($i >= 0 and $i <= 10) {
  echo $i;
}

Pythonには「&&」がありません。「and」のみを使う。

i = 1
if i >= 0 and i <= 10:
  print(i)

orに関しても一緒です。PHPだと「or」の他に「||」という記号も使えますが、Pythonは「or」だけです。



余談ですが、PHPの「and」と「&&」は厳密には少し違います。「or」と「||」も同様です。違うというか、優先順位に差があります。

簡単に言うと、「&&」や「||」の方が「and」や「or」よりも先に評価されるって感じです。

$i = 101;
if($i >= 10 || $i <= 0 and $i % 2 == 0) {
  echo $i;
}

例えばこれは「and」よりも「||」の方が先に評価されるので、意味合い的には「$iが10以上か0以下で、なおかつ偶数ならば真」となります。なので100ならtrueになるけど101は偶数じゃないのでfalseになる。

$i = 101;
if($i >= 10 or $i <= 0 && $i % 2 == 0) {
  echo $i;
}

一方、こう書くと「or」よりも「&&」の方が先に評価されるので、「$iが0以下でなおかつ偶数であるか、10以上ならば真」となります。この場合は100も101も10以上なのでtrueになる。



switch文

では続いてswitch文を書いてみましょう。

……と言いたいところなのですが、残念ながらPythonにはswitch文がありません。なのでswitch文的なことを書く場合もif文を使うことになります。

//PHP
$i = 1;
switch($i) {
  case 1:
    echo 'One';
    break;
  case 2:
    echo 'Two';
    break;
  default:
    echo 'Other';
}

#Python
i = 1
if i == 1:
    print('One')
elif i == 2:
    print('Two')
else:
    print('Other')

Pythonの方はさっきと同じですね。

この辺はどうでしょうか……僕はswitch文をわりと多用する方なんで、あると良いなーと思わなくもないですが、まあどうしてもないと困るってほどではないかしら。



三項演算子

最後に三項演算子について。

これはちょっと戸惑った。PHPでの書き方に見慣れてると、慣れるまでは「何じゃこりゃ?」って思うかもしれない。僕は思った。

//PHP
$i = true;
echo $i == true ? 'True' : 'False';

#Python
i = True
print('True' if i == True else 'False')

ちょっと変則的な感じに見えなくもない気がしません?

PHPは「条件式 ? 真 : 偽」って書きます。javascriptでもそうですね。それに対してPythonは「真 if 条件式 else 偽」という書き方をする。条件式が真ん中にあるから違和感を覚えるのかな。






&&や||がなかったりswitch文がないってのは、覚えることが少ないって意味ではシンプルにまとまってて良いのかもしれませんね。if文さえ押さえときゃ分岐はオッケーって感じで。

三項演算子も書き方が変則的だけど、実質if文を一行にしてるだけだものね。ifとelseが出てくるし。



その他のPythonを少し触ってみたの記事はこちら
前書きと索引的な
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください