忘却まとめ

Blenderの中級者・上級者向けの踏み込んだ情報や、アドオン・3DCGに関する情報を記事にします

ソースコードをきれいに書く【Python】

Python

更新日:

ソースコードを短く

長文にしない

長文のソースコードは見にくい。
長くなるようなら関数分けやファイル分けをする。

また、プログラムは、長いより短い方が美しくよりよいコードになることが多い
冗長なソースコードは、簡略化できる方法を探す。

ファイル(モジュール)分けする

各内容をファイルやフォルダに分類することで、どこに何があるかわかりやすくする。
同じファイル内には似た内容をまとめる。分けられるなら分ける。

  • オペレーター(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文の終わりや別の関数・クラスなどの時は一定の間隔を開ける。
また、大量に行を開けようとしない。

整形機能を使う

atom-Beautify

自分は残念ながらうまくインストールできないので使っていない。

また、複数の引数があると各引数ごとに改行されてしまったり、自分にとって微妙な結果になることもあるので設定の調整が必要。

アドオンの制作依頼はこちら

-Python

Copyright© 忘却まとめ , 2024 All Rights Reserved Powered by STINGER.