😽

【Python】TruthyとFalsyを知らずに実務をしていた

に公開

副業エンジニア1年目。幸いこれまで納品してきたシステムにバグはない。ところがそれは「AIの支援ありき」の話。実際にはTruthyFalsyの違いを知らずに、コーディングしていました。お恥ずかしい話ですが、長期休暇を利用して基本を再学習していて気が付き...。

自戒もこめてメモしておこうと思います。要は以下のようなコードを曖昧にしか理解していませんでした。

意味もわからずコードを書いていた恐怖

def check_truthiness(var):
    if var:
        print(f"{var} は Truthy です。")
    else:
        print(f"{var} は Falsy です。")

check_truthiness("text")        # -> Truthy
check_truthiness(42)            # -> Truthy
check_truthiness([0, 1])        # -> Truthy

print("---")

check_truthiness("")            # -> Falsy
check_truthiness(0)             # -> Falsy
check_truthiness([])            # -> Falsy
check_truthiness(None)          # -> Falsy

具体的には、WikipediaのAPIからサマリーを取得し、表示するコードを書いていた時。「クラスは辞書かNoneしか返さない仕様だけれど...」。本当にこの書き方であっているのか、変に悩みました。

if __name__ == "__main__":
    # 使用例
    fetcher = WikipediaFetcher()

    # "Zenn"の情報を取得して要約を表示
    zenn_data = fetcher.fetch_data("Zenn")
    if zenn_data:
        print("--- Zennの要約 ---")
        print(zenn_data["summary"])

    # "Qiita"の情報を取得して要約を表示
    qiita_data = fetcher.fetch_data("Qiita")
    if qiita_data:
        print("\n--- Qiitaの要約 ---")
        print(qiita_data["summary"])

if var: と書くのは bool(var) is Trueと書くようなもの

「あれ? if zenn_data:ってなんだっけ? if zenn_data is not None:じゃダメなんだっけ?」って感じで小一時間悩んでいました。

結果的にはif zenn_data:if zenn_data is not None:は「この文脈」では等価なわけですが、if zenn_data:と書く以上は、zenn_data → Truthy or not → True or Falseって流れが頭に入ってないといけない。

あるいはhoge_data → None → Falsthy → Falseってイメージで、どうやってBool値にたどり着くのか。今までよくわからずに、if var:を感覚で使っていたんですよね。

納期との兼ね合いで「とにかく動けー--」って日々だったからこそ、こういう基礎はつど確認しよう! と。とっても反省した、というお話でした。

Discussion