WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

識別子名に日本語

by WebSurfer 2015年3月17日 17:23

変数、メソッド、プロパティなどの識別子名に、見易さや保守性を考えて日本語を使うという話を時々聞きますが、言語仕様上許されているからと言って安易に使うと思わぬ副作用がありそうという話を書きます。

自分が気がついた例に限っての話ですが、それは ASP.NET MVC のモデルのプロパティ名、コントローラーのアクションメソッドの引数名です。

モデルのプロパティ名は html ソースでは name 属性に設定され、クライアント側でのユーザー入力の検証やサーバー側でのモデルバインディングに使われます。

具体的には次の通りです。

先の記事 コレクションのデータアノテーション検証 で紹介したモデル / ビュー / コントローラーのコードを見てください。そのモデルには CountryList と Name というプロパティ名が使われています。それを元に以下のようなビューを書くと、

@Html.LabelFor(m => m.CountryList[i].Name)
@Html.EditorFor(m => m.CountryList[i].Name)
@Html.ValidationMessageFor(m => m.CountryList[i].Name)

生成される html ソースは以下のようになります。

<label for="CountryList_0__Name">国名</label>
<input class="text-box single-line" 
  data-val="true" 
  data-val-length="国名 は 15 文字以内" 
  data-val-length-max="15"
  data-val-required="国名 は必須" 
  id="CountryList_0__Name"
  name="CountryList[0].Name" 
  type="text"
  value="Italy" />
<span class="field-validation-valid" 
  data-valmsg-for="CountryList[0].Name" 
  data-valmsg-replace="true">
</span>

上記の CountryList と Name が日本語になった場合、jQuery ライブラリを使ったクライアント側での検証がうまく動くのか、ブラウザで form が submit されると き name 属性がどうなるか、サーバー側できちんとモデルバインディングされるかが気がかりです。

モデルのプロパティ以外で思いつくものとしてはアクションメソッドの引数名があります。これもサーバー側でのモデルバインディングに関係します。

他にも予期できない副作用があるかもしれません。十二分に検証すれば済むかもしれませんが、そもそも余計な気苦労と不要な手間です。そこまでして日本語を使う理由はなさそうです。

クライアント側に影響がありそうな ASP.NET MVC アプリの識別子名で、日本語を使っても問題なさそうなのはコントローラーのアクションメソッド名ぐらいでしょうか?

例えば、以下のようにアクションメソッド名は日本語でも、ActionNameAttribute で英語名 Countries を付与すればブラウザからは Countries で呼べます。

[ActionName("Countries")]
public ActionResult 国リスト取得()
{
  return View();
}

でも、やっぱり日本語を使うのは個人的にはお勧めではないです。例えば、Countries でなら呼べますが Countries では 404 エラーです。違いが分かりますか?

答は、名前の最後の s が半角 / 全角の違いということです。

そんなエラーはすぐ気がつくと思われるかもしれませんが、たとえ 1 分で気がついたとしても時間と労力の無駄には変わりないということで、やはり日本語は使用しない方がよいと自分は思います。

Tags: ,

.NET Framework

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2015年3月  >>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar