LoginSignup
1
1

識別子名に日本語

Posted at

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

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

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

具体例は次の通りです。

以下は「コレクションのデータアノテーション検証」という記事で紹介した View のコードです。Controller から渡されるモデル m には 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 英語のままなのですが、それらが日本語になった場合、JavaScript ライブラリを使ったクライアント側での検証がうまく動くのか、ブラウザで form が submit されるとき name 属性がどうなるか、サーバー側できちんとモデルバインディングされるかが気がかりです。

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

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

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

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

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

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

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

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

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1