命名基準の欠如
kivy戦記でも何度も言っているように、命名基準が事実上なく、それによって苦労させられたことである。
PythonにはPEP8というコーディング規約があるのだが、そこでも書き表していないボタン等の変数の表し方をもっと統一しておいた方がよかったと思っている。(それ以前に、あのfilelist.pyはPEP8の規約を違反してばかりなのだが、、、、)
結局filelist.pyでは、名前をこうしている。
まずAllSCN
次にSetSCN
その次は、「・・・」ボタンが押されたときのファイル選択である、LstPOP
最後に、エラーメッセージMsgboxOkおよびMsgboxOkWithPost (MsgboxOkCancelは結局未使用)
こうやって書き出してみたら、めまいがしてきた、、、
ああ、細かい命名基準がないから、その場のノリで名前を決めて、わやくちゃな名前になってしまったのだ。
以下、まったく私見ながら、これらの名前を変えていこうと思う。
class名のうち、画面名
PEP8では、
と、書いてある。CapWords方式とは、単語の頭文字を大文字にしてつなげるやりかただ。
Pascal形式とか、upper camel caseとか言ってるのと同じものだ。
現状では、大体これに沿っているが(SCNという書き方はおいといて)、ScreenとPopupは、それを表す単語を入れたいところ。
それ以前に、<AllSCN>という名前は何とかならないかと思っていたところ。
当初は、<OpeSCN>と<ResultSCN>というパーツがあって、全部で<AllSCN>としていたが、これも後に解消して、「All」という意味がなくなった。「Front」あたりが適当だろう。
また、Msgboxは作りすぎた。
<MsgboxOKCancel>は幽霊と化し、<MsgboxOk>と<MsgboxOkWithPost>は大差がなくなった。
メッセージ関係は統合しよう。
また、<LstPOP>で使っている<LstPOPDriveBtn>は、今落ち着いてみたら、ボタンでしかないので、思い切って<DriveBtn>に改名する。
こういう方針を決め、次に命名する位置を作る。
そんなわけで、変更するとこうなる。
旧 | 新 |
AllSCN | FrontScn |
SetSCN | SetScn |
ResultParts | ResultPts |
LstPOP | PathChoosePop |
LstPOPDriveBtn | DriveBtn |
MsgboxOK | (AgreeMsgPopに統合) |
MsgboxOKCancel | (廃止) |
MsgboxOKWithPost | AgreeMsgPop |
class名のうち、画面名以外の物
filelist.pyでは、kv言語に現れないclassとして、
PathRead()と、PathWhite()と、FilelistApp()があるが、main的な使われ方をしているFilelistApp()は別格として、PathRead()と、PathWhite()をどうしようか。
これは、英文法に近い名前に変更しよう。
旧 | 新 |
PathRead | ReadPathInf |
PathWhite | WhitePathInf |
メソッド名
PEP8では、
と、書いてある。
そして、filelist.pyを見る。
暗澹たる気持ちになる、、、
まず気が付くのは、「def setSelect(self):」という風に、lower camel caseで書いてあるのが結構あること。
これを「def btn_ok(self):」という風にsnake caseで書くのがPython流だということだ。蛇つながりだ。
今回は、対象となるメソッドにどういう機能があるかを表す名前にした。
それに、結構思い付きで書いているものがあるので、これも直す必要がある。大仕事だ。
そんなわけで、実はいったんこの方針で名前を変えたのだが、変更作業はテストしてみるとなかなか漏れが出てくるもので、骨が折れる。
こんな非生産的な作業を延々と続けているなんて、、、
まだこれぐらいの規模だからいいが、これがもっと大規模なアプリだったらと思うと、ぞっとする。
ああ、名前は最初にきっちり決めて、以降変更がないようにする方が賢明である。
さて、命名基準は再び変更することにした。
今回は、イベントに関連した処理は、「~の時」、それ以外は「~したい」という命名にすることにした。
それを20文字以内で表す。
idについては基本的に、それを示すウィジェット。それでを表すことができない場合(TextInputなど)は、独自名称。
いろいろ考えた結果、idも含めて、とりあえず次のようにした。
class改称前 | class改称後 | ボタン表示 | メソッド改称前 | 案(~の時、したい) 機能名 | 文字数 | 日本語の意味(~の時、したい) 機能名 |
AllSCN | FrontScn | (id) | resultparts | result_pts | 10 | ResultPtsウィジェット |
AllSCN | FrontScn | (id) | file_name | selpath | 7 | 選択パスフィールド |
AllSCN | FrontScn | ・・・ | allSelect() | prs_chooser() | 11 | ファイル選択ボタンが押されたときの処理。 |
AllSCN | FrontScn | 実行 | allExec() | prs_exec() | 8 | 実行ボタンが押されたときの処理。 |
AllSCN | FrontScn | 設定 | setupButtonClicked() | prs_set() | 7 | 設定ボタンが押されたときの処理。 |
AllSCN | FrontScn | msgTestCancel() | (要 廃止) | (要 廃止) | ||
AllSCN | FrontScn | msgTestOk() | (要 廃止) | (要 廃止) | ||
AllSCN | FrontScn | fileread_ng() | file_err() | 8 | ファイル読み込み処理で異常だった時の処理 | |
AllSCN | FrontScn | begin_display() | initial() | 7 | 初期処理 | |
AllSCN | FrontScn | allFileNameCheck() | isdir_selpath() | 13 | この選択パスのディレクトリか否かを判断したい | |
AllSCN | FrontScn | msgFileNameInputErrorOk() | prs_err_agree() | 13 | エラー時の了解(OK)ボタンが押されたとき | |
AllSCN | FrontScn | msgOsErrorOk() | prs_oserr_agree() | 15 | OSレベルでのエラー時の了解(OK)ボタンが押されたとき | |
AllSCN | FrontScn | allSelectCancel() | prs_popup_cancel() | 16 | キャンセルボタンが押されたときの処理。 | |
AllSCN | FrontScn | allSelectLoad() | prs_popup_load() | 14 | 読み込みボタンが押されたときの処理。 | |
ResultParts | ResultPts | (id) | tv_v | tree_view | 9 | TreeViewウィジェット |
ResultParts | ResultPts | del_dir() | del_tree() | 8 | Tree情報を消去したい | |
ResultParts | ResultPts | fileread_ng() | file_err() | 8 | ファイル読み込み処理で異常だった時の処理 | |
ResultParts | ResultPts | idv_dir() | get_each_tree() | 13 | Tree情報をディレクトリごとに求めよ | |
ResultParts | ResultPts | tree_display() | get_tree() | 8 | Tree情報を求めよ | |
ResultParts | ResultPts | btn_ok() | prs_err_agree() | 13 | エラーメッセージの「了解(OK)」ボタンが押されたとき | |
SetSCN | SetScn | (id) | begin_path_dsp | bgnpath | 7 | 開始パスフィールド |
SetSCN | SetScn | ・・・ | setSelect() | prs_chooser() | 11 | ファイル選択ボタンが押されたときの処理。 |
SetSCN | SetScn | OK | selfOK() | prs_ok() | 6 | OKボタンが押されたときの処理。 |
SetSCN | SetScn | キャンセル | selfCancel() | prs_cancel() | 10 | キャンセルボタンが押されたときの処理。 |
SetSCN | SetScn | msgTestCancel() | (要 廃止) | (要 廃止) | ||
SetSCN | SetScn | pathwhite_ng() | file_err() | 8 | ファイル読み込み処理で異常だった時の処理 | |
SetSCN | SetScn | setBeginPathCheck() | isdir_bgnpath() | 13 | この開始パスのディレクトリか否かを判断したい | |
SetSCN | SetScn | msgTestOk() | prs_err_agree() | 13 | エラーメッセージの「了解(OK)」ボタンが押されたとき | |
SetSCN | SetScn | setSelectCancel() | prs_popup_cancel() | 16 | POPUPの「キャンセル」ボタンが押されたとき | |
SetSCN | SetScn | setSelectLoad() | prs_popup_load() | 14 | POPUPの「読み込み」ボタンが押されたとき | |
LstPOP | PathChoosePop | (id) | drive_list | drive_list | 10 | RecycleViewウィジェット |
LstPOP | PathChoosePop | (id) | filechooser | filechooser | 11 | FileChooserListViewウィジェット |
LstPOP | PathChoosePop | (id) | lst_pop | lst_pop | 7 | PartsChoosePopウィジェット |
LstPOP | PathChoosePop | キャンセル | cancel | prs_cancel() | 10 | キャンセルボタンが押されたときの処理。 |
LstPOP | PathChoosePop | 読み込み | load | prs_load() | 8 | 読み込みボタンが押されたときの処理。 |
LstPOP | PathChoosePop | is_dir() | isdir_choosepath() | 16 | このファイル選択パスのディレクトリか否かを判断したい | |
LstPOP | PathChoosePop | lstChooser() | prs_path() | 8 | ファイルパスが選択されたときの処理 | |
LstPOPDriveBtn | DriveBtn | on_select_button() | prs_drive() | 9 | ドライブボタンが押されたとき | |
PathRead | ReadPathInf | btn_ok() | prs_err_agree() | 13 | エラーメッセージの「了解(OK)」ボタンが押されたとき | |
PathWhite | WhitePathInf | btn_ok() | prs_err_agree() | 13 | エラーメッセージの「了解(OK)」ボタンが押されたとき | |
MsgboxOkWithPost | AgreeMsgPop | 了解 | btn_ok | prs_agree1() | 10 | 了解ボタンが押されたとき1 |
MsgboxOkWithPost | AgreeMsgPop | 了解 | btn_ok_post | prs_agree2() | 10 | 了解ボタンが押されたとき2 |
MsgboxOk | (廃止) | OK | (廃止) | (廃止) | (廃止) |
ちなみに、略称とその意味はこのようにした。
略称 | 意味 |
bgnpath | begin path(開始パス) |
btn | button |
cls | close |
dsp | display |
inf | information |
msg | message |
prs | press |
pts | parts |
scn | Screen |
つまり、画面に表すとこうなる。
<AllSCN>改め<FrontScn>は、こうなる。
次に<SetScn>は、
そして、<LstPOP>改め<PathChoosePop>
最後に、<MsgBoxOkWithPost>改め<AgreeMsgPop>
名前は、今回のが決定値ではないが、とりあえずこういうパターンでいけばいいんじゃないかと思っている。