RubyとPythonの構文〜分岐〜
はじめに
「Rubyしかできない奴はアルゴリズムがわからない馬鹿だ」というような記事を読んだり(どこで読んだか忘れました)
ペアプロでハッカソンしている中でアルゴリズム考えるの苦手という声をよく聞いたりします。
大学で取ったアルゴリズム論(眠かった)が初めて活かせるかもしれない!と思ったのでこれから色々分解していきたいと思います。
まずは使える構文の整理をしてみました。
この記事のゴール
・条件分岐の構文が使い分けられるようになる
・RubyとPythonのコードの違いがわかる
そもそも構文とは?
プログラムの基本的な命令の書き方のこと。
プログラムは3つの動きしかしません。
・順次処理:上から順番に実行される。基本はこの動き。
・分岐処理:条件によって処理を変える。心理テストみたいな動き。
・反復処理:同じ処理を繰り返す。ほっとくと無限に続いてしまうから何かの条件と組み合わせる。
これらの書き方のルールが構文です!
ちなみに、変数、定数、代入なども構文と言われることがあります。
条件分岐の構文
if
設定された条件によって実行する処理を変えます。条件に合わなかった時の処理も設定できます。
図にするとこう↓
Rubyのif
if - elsif・・・else - end で記述します。
if a == b
puts "aとbは等しい"
elsif a > b
puts "aが大きい"
else
puts "bが大きい"
end
Pythonのif
if - elif・・・else で記述します。
if a == b:
print("aとbは等しい")
elif a > b:
print("aが大きい")
else:
print("bが大きい")
ちなみに
if-endを複数並べるよりもif-elsif-else-endで実装した方が処理速度が早いらしいです。
unless
設定された条件に合わなかった時に処理を実行します。ifの反対です。
Rubyのunless
unless a = b
puts "aとbは等しくない"
end
elseも使えますが、処理を2つに分岐させたい場合は if-else を使う方が好ましいです。
「〜ではない時」を条件にしたい場合は否定演算子(!)を使います。
unless a == b
puts "aとbは等しくない"
else
puts "aとbは等しい"
end
#以下と同じ
if a != b
puts "aとbは等しくない"
else
puts "aとbは等しい"
end
#結局これでいい
if a == b
puts "aとbは等しい"
else
puts "aとbは等しくない"
end
elsifで複数の条件を設定することはできません。複雑な分岐になるときはif文を使いましょう。
じゃあいつunlessを使うの?
- 処理が一つで
- 否定条件の方がわかりやすい時
にunlessを使います。
unless year > 20
puts "お酒は買えません"
end
Pythonのunless
ないです!!が、if notという書き方ができます。
if not year > 20:
print("お酒は買えません")
and,or,notの論理演算子を使って条件を設定できるみたいです。
詳しくはこちら
case(switch文)
何かの値によって複数の分岐をさせたい時はcaseがおすすめです。
ifだと条件式を分岐の回数分記述しないといけませんが、caseでは条件は1つで済むからです。
(Rubyカリキュラム「レビューアプリ」のinputの値によるメニューの分岐はcaseの方がシンプル!)
Rubyのcase
case a
when 1
puts "aは1"
when 2
puts "aは2"
else
puts "なんでもないよ"
end
ifの条件に==を使用し、複数の分岐を設定する時と動きは一緒です。
比較する値を2つ以上設定することもできます。
case a
when 1,2
puts "aは1か2"
when 3,4
puts "aは3か4"
else
puts "なんでもないよ"
end
Pythonのcase
ないです!!!!公式ドキュメントによると、
if... elif... elif... else の繰り返しで簡単に同じことができます。switch 文の構文に関する提案がいくつかありましたが、範囲判定をするべきか、あるいはどのようにするべきかについての合意は (まだ) 得られていません。
if-elif-elseで書いてくれだそうです。
ちなみに
ifとcaseの処理速度の差はほとんどないらしいです。JSの比較記事も誤差の範囲だった。
まとめ
今回調べていて、(当たり前かもしれませんが)以下のことがわかりました。
・言語によって使える構文が違う
・実装したい処理によって使うべき構文が違う
基本はif文で力技実装しかしないので、他の構文も使おうと思いました。
とはいえ処理速度が〜とかメモリ使用量が〜とかの根拠がないっぽいので、
使い分けはあくまで好みとか可読性なのかな?というのが今日の結論です。
反復まで書きたかった、、、。
追記
今度書きたい。
・そもそもアルゴリズムってなに?
・フローチャートってどう書くの?
Author And Source
この問題について(RubyとPythonの構文〜分岐〜), 我々は、より多くの情報をここで見つけました https://qiita.com/ytleoo/items/971acc8a4b5692eea8d0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .