きれいに書く

INPUT · スライド

読まれるコードで仕上げる

01 / 06

4つの道具をならべる

この章で手に入れたのは4つ。どれも動きを変えない道具だ。

  • PEP 8 … 書きかたをそろえる。字下げは半角4つ、名前は小文字とアンダースコア、演算子の前後に空白1つ
  • docstring … 関数やクラスのすぐ下に """...""" で説明を置く
  • 型ヒント … 何を受け取って何を返すかを書き添える
  • dataclass … データを持つだけのクラスから、決まりきった行を消す

動きが変わらないのに、なぜやるのか。読む人の時間を減らすためだよ。そしてその読む人は、たいてい三日後のあなただ。

02 / 06

名前が半分を決める

どの道具よりも効くのが名前。a や x を nedan や kosuu に変えるだけで、説明の一文が要らなくなることは多いよ。

  • 変数と関数は小文字とアンダースコア(nenkaihi / goukei_kingaku)
  • クラスは大文字始まり(Kaiin / Shohin)
  • 中身が複数なら複数形(kaiins / nedans)

説明を足す前に、名前で言えないかを先に考えよう。

tanka = 250kosuu = 4print(f"ごうけい {tanka * kosuu}円")

実行結果

ごうけい 1000円

03 / 06

型ヒントと docstring は役わりがちがう

2つとも読む人のための道具だけれど、答えているものがちがうよ。

  • 型ヒント … 何を渡して、何が返るか
  • docstring … それが何をするのか、渡す値に条件はあるか

型ヒントで言えていることを docstring に書き直す必要はない。重ならないことを書くのがコツだよ。

def waribiki(nedan: int, ritsu: float) -> int:    """値引き後の金額を返す。ritsu は 0.2 のような割合で渡す。"""    return int(nedan * (1 - ritsu))print(waribiki(1000, 0.2))

実行結果

800

04 / 06

dataclass がいちばん効く場所

@dataclass は、辞書で持っていたデータを置きかえるときにいちばん効くよ。

辞書だと shina["nedan"] とクォートを書くことになるし、キーを打ちまちがえても実行するまで気づけない。@dataclass なら shina.nedan と書けて、持ちものが型つきで宣言された1か所にまとまるんだ。

from dataclasses import dataclass@dataclassclass Shohin:    namae: str    nedan: intshohins = [Shohin("りんご", 150), Shohin("みかん", 80)]for shohin in shohins:    print(f"{shohin.namae} {shohin.nedan}円")

実行結果

りんご 150円
みかん 80円

05 / 06

直しかたの順番

一度に全部きれいにしようとすると手が止まる。上から順に、1つずつでいいよ。

  • 名前を読める言葉に変える
  • 長い処理を、名前のつく単位で関数に分ける
  • 外から使う関数に型ヒントと docstring をつける
  • データを持つだけのクラスを @dataclass にする

どれも動きを変えないまま形だけ直す作業だ。1つ直すたびに動かして、出力が変わっていないことを確かめよう。それが安全に片づけるコツだよ。

06 / 06

最後の10問

ここからが Python コースの最後の10問だよ。新しい文法はもう出てこない。

前半は道具を1つずつ。後半はだんだん大きくして、最後の1問はクラスとリストと関数を組み合わせた、小さいけれど完成したプログラムにする。

ここまで来れば、Python コースは終わりだ。文法をひととおり通って、他人のコードが読めて、読まれるコードが書ける。次に何を作るかは、あなたが決める番だよ。