kivy

kivy戦記反省会(2) 命名基準の欠如

kivy
この記事は約10分で読めます。

命名基準の欠如

kivy戦記でも何度も言っているように、命名基準が事実上なく、それによって苦労させられたことである。

PythonにはPEP8というコーディング規約があるのだが、そこでも書き表していないボタン等の変数の表し方をもっと統一しておいた方がよかったと思っている。(それ以前に、あのfilelist.pyはPEP8の規約を違反してばかりなのだが、、、、)

 

結局filelist.pyでは、名前をこうしている。

まずAllSCN

 

次にSetSCN

その次は、「・・・」ボタンが押されたときのファイル選択である、LstPOP

最後に、エラーメッセージMsgboxOkおよびMsgboxOkWithPost (MsgboxOkCancelは結局未使用)

こうやって書き出してみたら、めまいがしてきた、、、

 

ああ、細かい命名基準がないから、その場のノリで名前を決めて、わやくちゃな名前になってしまったのだ。


以下、まったく私見ながら、これらの名前を変えていこうと思う。

class名のうち、画面名

PEP8では、

クラスの名前には通常 CapWords 方式を使うべきです。

と、書いてある。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>

 

名前は、今回のが決定値ではないが、とりあえずこういうパターンでいけばいいんじゃないかと思っている。

 

タイトルとURLをコピーしました