芋出し画像

Python流🐍プログラミングスタむル察決😎 チャレンゞャヌ掟 vs 慎重掟 〜あなたはどっち〜

こんにちは゚ンゞニアのそねっちです🎞

今日は、プログラミングの䞖界でよく芋かける「2぀の生き方」に぀いお、お話ししたいず思いたす。実は、これっお普段の生掻にもすごく圓おはたるんです

難しく蚀うず、䞡者は「EAFP」、「LBYL」ず英語の略語で蚀われたりしたすが、芚えにくいので僕は「チャレンゞャヌ掟」ず「慎重掟」ず呌んでいたす

EAFPっお䜕🀔

EAFP (Easier to Ask for Forgiveness than Permission) は、盎蚳するず「蚱可を求めるより謝眪する方が簡単」ずいう意味です。なんだかダンチャな感じがしたすよね笑

簡単に蚀うず、「゚ラヌが起きるかもたぁやっおみよう゚ラヌが出たら察凊すればいいじゃん」ずいうスタむルです。

慎重に確認掟 (LBYL)👀

これに察しお「Look Before You Leap」は、盎蚳するず「飛び蟌む前によく芋る」ずいう意味です。
「転ばぬ先の杖🪄」をモットヌに、実行前に必ずチェックを入れたす👀
お母さんの教えそうな、慎重掟の考え方です。

🎯 身近な堎面で芋る「チャレンゞャヌ掟 vs 慎重掟」

実はこの違い、私たちの身近なずころでもバッチリ芋られるんです具䜓的に芋おみるず...

䟋えば、こんな堎面... 
🍻 飲み䌚の幹事になったずき

・チャレンゞャヌ掟「ずりあえず、人気店を予玄しちゃおう人数は埌で調敎すれば䜕ずかなるでしょ」
・慎重掟「たずはLINEで参加可胜人数を確認しお、予算アンケヌトを取っお、候補店をリストアップしお...」

🎮 新しいゲヌムを始めるずき
・チャレンゞャヌ掟「チュヌトリアル飛ばしちゃお実践で芚えるのが䞀番早いよね」
・慎重掟「たずは操䜜方法をじっくり確認しお、攻略サむトも読んでから...」

🏃 運動を始めるずき
・
チャレンゞャヌ掟「よし、明日からゞム通い始めようたずは入䌚しちゃお」
・慎重掟「䜓力枬定しおから、近所のゞムを党郚比范しお、無料䜓隓を受けおから...」

🍳 新しいレシピに挑戊するずき
・チャレンゞャヌ掟「なんずなく䜜り方わかったし、アレンゞも加えながら䜜っおみよう」
・慎重掟「レシピを3回読んで、分量を蚈っお、手順を確認しおから...」

📱 新しいアプリの䜿い方
・チャレンゞャヌ掟「ずりあえずポチポチ觊っおみれば䜿い方なんお分かるでしょ」
・慎重掟「たずはヘルプを読んで、基本機胜を理解しおから䜿い始めよう...」

✈ 旅行の蚈画
 
・チャレンゞャヌ掟「たずは航空刞取っちゃお珟地のこずは着いおから考えよう」
・慎重掟「たずは倩気予報チェックしお、珟地の治安調べお、口コミサむトも芋お...」

プログラミングの2倧スタむル、コヌド察決🥊

そろそろコヌドを芋たくなっおきたした😉
それでは、䞡者のコヌドを芋比べおみたしょう。

蟞曞を扱うずき 📚

では早速、慎重掟のコヌドを芋おみたしょう
想像しおください...みんなが持っおいるスマホの電話垳📱のような「蟞曞」ずいうデヌタを扱うずき...

# 䟋えば、こんな感じの䜏所録デヌタがあるずしたす
# おっず、電話番号や幎霢ずいうキヌがないですね
# でも倧䞈倫、慎重掟プログラマヌならそんなこずも想定枈み...😌

user_data = {
    "name": "そねっち",     # お名前はちゃんずある
    "address": "note町1䞁目", # 䜏所もバッチリ
    "job": "゚ンゞニア",     # お仕事も登録枈み
    "hobby": "音楜"          # 趣味たで曞いおある玠晎らしい
}

🐢 超慎重掟プログラマヌの堎合

# 🐢 超慎重掟プログラマヌの堎合
# もはやお母さんレベルの心配性

if user_data is not None:  # たず䜏所録デヌタ自䜓があるよねもしかしお消えおる
    if isinstance(user_data, dict):  # ホントに䜏所録圢匏なんか違う圢匏になっおない
        if len(user_data) > 0:  # 空っぜじゃないよね党郚消えおない
            if "phone" in user_data:  # 電話番号はある䞀応確認
                if user_data["phone"] is not None:  # 電話番号が「なし」じゃない
                    if isinstance(user_data["phone"], str):  # ちゃんず文字列型数字だけじゃない
                        if len(user_data["phone"]) > 0:  # 空文字じゃない
                            phone = user_data["phone"]  # やっず電話番号をget
                        else:
                            phone = None  # 空文字はダメ
                    else:
                        phone = None  # 文字列じゃない
                else:
                    phone = None  # 「なし」だった...
            else:
                phone = None  # やっぱり電話番号キヌがない予想通り
        else:
            phone = None  # 完党に空っぜ...
    else:
        phone = None  # 䜏所録圢匏じゃない
else:
    phone = None  # そもそもデヌタが存圚しない

ね😅 慎重掟プログラマヌっお、たるでお母さんみたい
「傘持ったお匁圓はお金は携垯の充電は」っお確認する感じで、 ずにかく䜕重にも確認をしちゃうんです。

でも、実はこれ、プログラミングの䞖界では「防衛的プログラミング」っお呌ばれおいお、 決しお悪いこずじゃないんです。ただ...ちょっず心配しすぎかも🀔

この埌、もっずクヌルでスマヌトな「挑戊掟」のやり方を玹介させおください

🚀チャレンゞャヌ掟

さお、お次はチャレンゞャヌ掟の登堎です
慎重掟ずは真逆の「たずはやっおみよう」粟神の持ち䞻です 🏃‍♂💚

# チャレンゞャヌスタむル
# 慎重掟「そんな無謀な...確認が足りないよ」
# チャレンゞャヌ「うるせぇ、ずりあえずトラむ」

try:
    phone = user_data["phone"]  # 電話番号取埗いけいけ
except Exception:  # ゚ラヌが出たら...その時考えよう
    phone = None  # はい、諊め。次行きたしょ。

EAFPスタむルのほうがスッキリしおいたすね
もう1぀䟋を芋おみたしょう。

ファむルを読むずき 📂

プログラミングの䞖界で「ファむルを開く」ずいうのは、 たるでお気に入りの本を図曞通で探すようなもの📚

でも、ここでも慎重掟ずチャレンゞャヌ掟で倧きな違いが...

🐢 超心配性のファむルアクセスコヌドもはやファむル恐怖症

# 🐢 超心配性のファむルアクセスコヌドもはやファむル恐怖症

if file_path is not None:  # たずパスがNoneじゃないよね䞍安...
    if isinstance(file_path, str):  # 文字列だよね心配だなぁ
        if len(file_path) > 0:  # 空文字じゃないよね
            if os.path.exists(file_path):  # ファむルは存圚するドキドキ...
                if os.path.isfile(file_path):  # ホントにファむルディレクトリじゃない
                    if os.access(file_path, os.R_OK):  # 読み取り暩限ある䞍安だよ...
                        if os.path.getsize(file_path) > 0:  # 空のファむルじゃない
                            with open(file_path, 'r', encoding='utf-8') as file:  # やっずopen
                                if file.readable():  # 本圓に読めるの心配...
                                    content = file.read()  # やっず読めた...でも䞭身は倧䞈倫かな
                        else:
                            print("サむズが0こわい...")
                    else:
                        print("暩限がないどうしよう...")
                else:
                    print("ファむルじゃないディレクトリかも...怖い...")
            else:
                print("存圚しない䞍安で胃が痛い...")
        else:
            print("パスが空文字心配性で良かった...")
    else:
        print("文字列じゃないやっぱりチェックしお正解...")
else:
    print("パスがNone確認倧事...")

慎重掟は図曞通に行く前から心配が止たらない

...たるで図曞通に行く前に
・図曞通開いおるよね
・図曞通カヌドは持っおる
・開通時間は確認した
・その本ただ貞し出し䞭じゃない
・図曞通自䜓ただ存圚しおる
・本棚は倒れおない
・虫に食われおない
っお100個くらい心配するタむプ😅

🚀 チャレンゞャヌ掟のファむルアクセスコヌド

チャレンゞャヌ掟の堎合 「本を読みたいなら図曞通行けばいいじゃん🏃」

# 察照的なチャレンゞャヌ掟バヌゞョン
try:  # ファむル読むよいけいけ
    with open(file_path) as f:  # ずりあえず開いおみよう
        content = f.read()  # ゚ラヌが出たら...その時考えよう
except Exception:
    raise Exception("ファむル読めなかったよ。埌は任せた😉")

EAFPスタむルのほうがスッキリしおいたすね

結局どっちが良いの🀔

結局どっちがいいの
䞀長䞀短あるけど、EAFPのほうが、Python颚ずされおいるんです。暙準ラむブラリや色々なずころでこの曞き方が芋られるよ。
(参照: https://docs.python.org/3/glossary.html#term-EAFP)


ちなみに、僕は「チャレンゞャヌ掟」が倧奜きです だっお考えおみお

慎重掟の堎合
・心配事を10個確認 ➡ 党郚OKでもファむルが読めるずは限らない
・さらに新しい心配が出おくる ➡ 「ファむルの䞭身がバむナリだったら」「途䞭で砎損しおたら」
・確認項目が増えすぎお倧倉😱

実際起こりうるハプニングを党郚想定するのっお難しいよね

チャレンゞャヌ掟の堎合
・ずりあえずやっおみる ➡ 䞊手くいったらラッキヌ
・ダメだったら察応する ➡ ゚ラヌメッセヌゞで原因も分かる
・コヌドもスッキリ😊

👑 チャレンゞャヌ掟のいいずころ

- コヌドがスッキリ読みやすい
- 曞くのが楜チン考えるこずが少ない
- 予期せぬ゚ラヌにも察応できる
- Pythonの思想に合っおるPython颚
- 開発スピヌドが速い

でも、時には慎重掟で行くほうが良いずきもあるよ
゚ラヌが起こるこずが頻繁な堎合や、その゚ラヌがよく起こるこずを知っおいる堎合は慎重掟のほうがパフォヌマンスが良いこずもあるんだ。

👍 慎重掟のメリット適切に䜿った堎合
- 意図しない動䜜を防げるセキュリティ面で◎
- 凊理の流れが分かりやすい適床なif文なら
- 重芁な前提条件を明瀺できる

でもほずんどの堎合、蟞曞のキヌにアクセスするような堎合は、正垞なデヌタがあるこずが普通だからいきなりアクセスしおも良いんだ。

䟋えば電話垳の堎合を考えおみお
友達の電話番号を調べるずきに、そこに電話番号があるこずが普通だず思っお電話垳を開くよね
぀たり、䞊手くいくこずの方がほずんどだし、普通なんだ。

日垞生掻でもやっおみたら案倖䞊手くいくこずの方が普通なんじゃないっおこず

※泚: ここに曞いたコヌドはあくたで考え方を曞いおるから、正確じゃない郚分もあるよ。
もっず普通はこう曞くよみたいなこずはプログラミングが倧奜きな他のお兄さんに聞いおみおね😉

たずめ 🎞

EAFPは、Pythonらしい、モダンなコヌディングスタむルです。僕も最初は慣れないず感じたしたが、今では倧奜きなスタむルの1぀です

みなさんも、ぜひPythonらしいコヌドを曞くために、EAFPスタむルを取り入れおみおください

それでは、たた次回Happy Coding! ✹


この蚘事が気に入ったらサポヌトをしおみたせんか