
もくじ
ソースコードを短く
長文にしない
長文のソースコードは見にくい。
長くなるようなら関数分けやファイル分けをする。
また、プログラムは、長いより短い方が美しくよりよいコードになることが多い。
冗長なソースコードは、簡略化できる方法を探す。
ファイル(モジュール)分けする
各内容をファイルやフォルダに分類することで、どこに何があるかわかりやすくする。
同じファイル内には似た内容をまとめる。分けられるなら分ける。
- オペレーター(op)・メニュー(ui)・ユーティリティ(utils)など分類ごとにフォルダ分けする
- __init__内には登録に関することだけを書き、関数やクラスを書かない
処理内容ごとに関数をきり分ける
なるべく小分けに関数化する。
1つの関数には1つの処理だけを担当させるように心がける。
関数の処理内容のコメントを付けたときに1言で言い表せる程度にする。
特にif文で処理が大きく分かれる時などは関数で別々にした方がよい。
徹底しなくても、あくまで自分が扱いやすい程度で分ける。
- ソースコードの流れがわかりやすくなる
- 関数を分ければ別の処理で使い回すことができる
命名規則
関数名で内容がわかるように
多少長くなってもいいので、関数の内容がわかるようにする。
命名規則はある程度事前に決めておくとよい。
- get_~ → 何かを取得する
- set_~ → 何かを設定する
- draw_~ → メニュー表示の関数
変数の定義は最初にまとめる
変数の定義と処理を分けることで、ソースコードが見やすくなる。
プログラムの途中で変数を定義すると、後で書き換えたときに変数がまだ作られていない箇所に移動してしまったりする。エラーの原因になりうる。
処理の途中で変数を作る場合は1度だけ利用する時のみにする、などと規則を決める。
よく使う変数名は事前に決めておく
よく使う変数名を同じにしておけば、覚えやすく、コピペしたときに使い回しやすい。
obj = bpy.context.object obj_act = bpy.context.view_layer.objects.active props = bpy.context.scene.my_addon sc = bpy.context.scene vl = bpy.context.view_layer mod_l = [mod for mod in obj.modifiers] mat_l = [mat for mat in bpy.data.materials]
for文や内包表記で使う変数に注意
下記のようにfor文内で使う変数名と他で使っている変数名が同じだと、最初に定義した方が上書きされてしまう。
名前が被らないように注意する。
一時的に使うものであれば、oやiなどの1文字でもよい。
obj = bpy.context.object for obj in bpy.context.selected_objects: obj.name # 最初に定義したオブジェクトではなく、 # for文で回した最後のオブジェクトが「obj」の中身になっている obj.name
書き方
可能ならインデントをなくす(事前にreturn)
Pythonの記法としてインデントは必要だが、インデントが深すぎると見づらくなる。
単純なif文なら、逆に条件に当てはまらない場合は先にreturnする処理を書く。
このようにすれば、インデントがなくなり、見やすくなる。
特定条件の場合だけ処理を行う関数内で有用。
元のコード
if bpy.context.object: if bpy.context.object.type == "MESH": … … … …
改善後のコード
if not bpy.context.object: return if not bpy.context.object.type == "MESH": return … … … …
「 ; 」を使って改行の代わりにする
複数行の短い文字をまとめたい場合に効果的。
あまり正規な書き方ではないので多用はしないこと。
元のコード
op = layout.operator("object.transform_apply") op.location=False op.rotation=True op.scale=False op.properties=False
改善後のコード
op = layout.operator("object.transform_apply") op.location=False; op.rotation=True; op.scale=False; op.properties=False;
コメント
コメントを付ける
処理内容がわかりやすいように所々にコメントを付ける。
コメントアウトしている行は削除
コメントアウトしている行は、ほとんどの場合今後も使わないことが多い。
コミットしてバックアップを取っておいて、不要な行は削除しておく。
関係を分けたい時は、2行あける
if文の終わりや別の関数・クラスなどの時は一定の間隔を開ける。
また、大量に行を開けようとしない。
整形機能を使う
自分は残念ながらうまくインストールできないので使っていない。
また、複数の引数があると各引数ごとに改行されてしまったり、自分にとって微妙な結果になることもあるので設定の調整が必要。