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>に改名する。

 

こういう方針を決め、次に命名する位置を作る。

そんなわけで、変更するとこうなる。

AllSCNFrontScn
SetSCNSetScn
ResultPartsResultPts
LstPOPPathChoosePop
LstPOPDriveBtnDriveBtn
MsgboxOK(AgreeMsgPopに統合)
MsgboxOKCancel(廃止)
MsgboxOKWithPostAgreeMsgPop

class名のうち、画面名以外の物

filelist.pyでは、kv言語に現れないclassとして、

PathRead()と、PathWhite()と、FilelistApp()があるが、main的な使われ方をしているFilelistApp()は別格として、PathRead()と、PathWhite()をどうしようか。

これは、英文法に近い名前に変更しよう。

PathReadReadPathInf
PathWhiteWhitePathInf

メソッド名

PEP8では、

関数の命名規約を使ってください。つまり、名前は小文字のみにして、読みやすくするために必要に応じて単語をアンダースコアで区切ります。

と、書いてある。

そして、filelist.pyを見る。

暗澹たる気持ちになる、、、

 

まず気が付くのは、「def setSelect(self):」という風に、lower camel caseで書いてあるのが結構あること。

これを「def btn_ok(self):」という風にsnake caseで書くのがPython流だということだ。蛇つながりだ。

今回は、対象となるメソッドにどういう機能があるかを表す名前にした。

それに、結構思い付きで書いているものがあるので、これも直す必要がある。大仕事だ。

 

そんなわけで、実はいったんこの方針で名前を変えたのだが、変更作業はテストしてみるとなかなか漏れが出てくるもので、骨が折れる。

こんな非生産的な作業を延々と続けているなんて、、、

まだこれぐらいの規模だからいいが、これがもっと大規模なアプリだったらと思うと、ぞっとする。

ああ、名前は最初にきっちり決めて、以降変更がないようにする方が賢明である。

さて、命名基準は再び変更することにした。

今回は、イベントに関連した処理は、「~の時」、それ以外は「~したい」という命名にすることにした。

それを20文字以内で表す。

idについては基本的に、それを示すウィジェット。それでを表すことができない場合(TextInputなど)は、独自名称。

いろいろ考えた結果、idも含めて、とりあえず次のようにした。

class改称前class改称後ボタン表示メソッド改称前案(~の時、したい) 機能名文字数日本語の意味(~の時、したい) 機能名
AllSCNFrontScn(id)resultpartsresult_pts10ResultPtsウィジェット
AllSCNFrontScn(id)file_nameselpath7選択パスフィールド
AllSCNFrontScn・・・allSelect()prs_chooser()11ファイル選択ボタンが押されたときの処理。
AllSCNFrontScn実行allExec()prs_exec()8実行ボタンが押されたときの処理。
AllSCNFrontScn設定setupButtonClicked()prs_set()7設定ボタンが押されたときの処理。
AllSCNFrontScnmsgTestCancel()(要 廃止)(要 廃止)
AllSCNFrontScnmsgTestOk()(要 廃止)(要 廃止)
AllSCNFrontScnfileread_ng()file_err()8ファイル読み込み処理で異常だった時の処理
AllSCNFrontScnbegin_display()initial()7初期処理
AllSCNFrontScnallFileNameCheck()isdir_selpath()13この選択パスのディレクトリか否かを判断したい
AllSCNFrontScnmsgFileNameInputErrorOk()prs_err_agree()13エラー時の了解(OK)ボタンが押されたとき
AllSCNFrontScnmsgOsErrorOk()prs_oserr_agree()15OSレベルでのエラー時の了解(OK)ボタンが押されたとき
AllSCNFrontScnallSelectCancel()prs_popup_cancel()16キャンセルボタンが押されたときの処理。
AllSCNFrontScnallSelectLoad()prs_popup_load()14読み込みボタンが押されたときの処理。
ResultPartsResultPts(id)tv_vtree_view9TreeViewウィジェット
ResultPartsResultPtsdel_dir()del_tree()8Tree情報を消去したい
ResultPartsResultPtsfileread_ng()file_err()8ファイル読み込み処理で異常だった時の処理
ResultPartsResultPtsidv_dir()get_each_tree()13Tree情報をディレクトリごとに求めよ
ResultPartsResultPtstree_display()get_tree()8Tree情報を求めよ
ResultPartsResultPtsbtn_ok()prs_err_agree()13エラーメッセージの「了解(OK)」ボタンが押されたとき
SetSCNSetScn(id)begin_path_dspbgnpath7開始パスフィールド
SetSCNSetScn・・・setSelect()prs_chooser()11ファイル選択ボタンが押されたときの処理。
SetSCNSetScnOKselfOK()prs_ok()6OKボタンが押されたときの処理。
SetSCNSetScnキャンセルselfCancel()prs_cancel()10キャンセルボタンが押されたときの処理。
SetSCNSetScnmsgTestCancel()(要 廃止)(要 廃止)
SetSCNSetScnpathwhite_ng()file_err()8ファイル読み込み処理で異常だった時の処理
SetSCNSetScnsetBeginPathCheck()isdir_bgnpath()13この開始パスのディレクトリか否かを判断したい
SetSCNSetScnmsgTestOk()prs_err_agree()13エラーメッセージの「了解(OK)」ボタンが押されたとき
SetSCNSetScnsetSelectCancel()prs_popup_cancel()16POPUPの「キャンセル」ボタンが押されたとき
SetSCNSetScnsetSelectLoad()prs_popup_load()14POPUPの「読み込み」ボタンが押されたとき
LstPOPPathChoosePop(id)drive_listdrive_list10RecycleViewウィジェット
LstPOPPathChoosePop(id)filechooserfilechooser11FileChooserListViewウィジェット
LstPOPPathChoosePop(id)lst_poplst_pop7PartsChoosePopウィジェット
LstPOPPathChoosePopキャンセルcancelprs_cancel()10キャンセルボタンが押されたときの処理。
LstPOPPathChoosePop読み込みloadprs_load()8読み込みボタンが押されたときの処理。
LstPOPPathChoosePopis_dir()isdir_choosepath()16このファイル選択パスのディレクトリか否かを判断したい
LstPOPPathChoosePoplstChooser()prs_path()8ファイルパスが選択されたときの処理
LstPOPDriveBtnDriveBtnon_select_button()prs_drive()9ドライブボタンが押されたとき
PathReadReadPathInfbtn_ok()prs_err_agree()13エラーメッセージの「了解(OK)」ボタンが押されたとき
PathWhiteWhitePathInfbtn_ok()prs_err_agree()13エラーメッセージの「了解(OK)」ボタンが押されたとき
MsgboxOkWithPostAgreeMsgPop了解btn_okprs_agree1()10了解ボタンが押されたとき1
MsgboxOkWithPostAgreeMsgPop了解btn_ok_postprs_agree2()10了解ボタンが押されたとき2
MsgboxOk(廃止)OK(廃止)(廃止)(廃止)

 

ちなみに、略称とその意味はこのようにした。

略称意味
bgnpathbegin path(開始パス)
btnbutton
clsclose
dspdisplay
infinformation
msgmessage
prspress
ptsparts
scnScreen

つまり、画面に表すとこうなる。

 

<AllSCN>改め<FrontScn>は、こうなる。

 

次に<SetScn>は、

 

 

そして、<LstPOP>改め<PathChoosePop>

 

最後に、<MsgBoxOkWithPost>改め<AgreeMsgPop>

 

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

 

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