プログラムを独学で勉強している初心者です(2ヶ月くらい)
ちょっとした疑問があり、質問させていただきます。
プログラムのサイトなどには、変数などの名称には英語を使うべきと書かれています。
これはなぜなのでしょうか?
はっきり言って、この風習があるために勉強で困っています。
勉強のためにサンプルコードなどを見ていても、英単語が並んでいると、
どれがプログラム特有の命令で、どれがプログラム記述者が自由につけた変数名なのかが
わかりにくいのです。
変数は変数であることがはっきりわかったほうが便利だと思うのです。
プログラムに慣れている人にはそんな必要ないのでしょうが…
自分でコードを書く時には、あとから自分でわからなくならないように
変数名には必ず「h_」をつけるようにしています。
h_speed とか h_count とか。
英語にするべき理由と、初心者のうちだけでも変数がわかりやすくするような
オススメの記述法などあったら教えていただけると嬉しいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
![guest](/img/icon/icnUserSample.jpg)
回答21件
0
ベストアンサー
私はもちろん「英語での命名を徹底すべき」と思っているのですが、質問文を読んでいてむしろ「なるほど⋯」と思ってしまいました。
特にここ。
どれがプログラム特有の命令で、どれがプログラム記述者が自由につけた変数名なのかがわかりにくいのです。
ここに、価値観の分かれ道があるんだろうと感じました。
多分私は(私を含め、多くの英単語命名者は)、クラスを作ったり関数を作ったりするのは「プログラムを作る」ことであると同時に「言語を拡張している」と考えています。
標準でたくさん便利なクラスが用意されているわけですが、自分がクラスを作ればそれも利用可能なクラスの一つになってより便利なわけですよ。言語環境を拡張していると言えます。
(私が最初に入った言語がBASICだったからというのもあるかもしれません。この言語ではプログラマが新しい命令を関数を作ることは(ごく限定的にしか)できませんでした。その後C言語を知って、標準ライブラリと同列に扱える関数をプログラマが書けると理解したときの感動と言ったら。無限に拡張できる言語じゃないか! と。)
プログラミングには、自分のプログラムを作っているという側面と言語環境自体を拡張している側面とがあり、特に後者のことを意識するともとの言語環境と同じような使い勝手、つまり命名規則をできるだけ守りたいという意識が働きます。
それで、英単語での命名に自然となるのです。
投稿2015/12/16 14:24
総合スコア5570
0
オライリーのリーダブルコードという本をオススメします。
2章の「名前に情報を詰め込む」が質問者の回答となることでしょう。
私からの回答は「役割をはっきりさせましょう」です。
チームや数カ月後の自分が分かるように書くことです。
プログラムを見なくても役割を明確にすることが大事です。
日本語か、ローマ字か、英語かは本質ではありません。
どれを選択するかは(仕事で趣味を想定して)開発チームに伝わるかで決めてみてはどうでしょうか。
もちろんオススメは英語です。
英語はニュアンスが限られ明確で正確な命名ができ、世界共通語で一般的だからです。
ですが、役割をはっきりした命名の感覚を養う事のほうが重要かと思います。
そういう意味で乱暴な言い方で日本語でもいいという事を書いています。
誰にも迷惑をかけない限りは、色々やってみるのがいいのではないでしょうか。
(英語に慣れていくのが将来の為になります。コードを読む事が増えてきますので)
例)
例えば、return_url()という関数名からはURLを返却するという事が伝わってきます。
悪例)
もしこれが、my_url()、kansu_url()、func_url()という名前だとしたら
役割が分かりにくいです。
コードの中身を見る必要があります。
という具合に命名はプログラミングの醍醐味の一つです。
ぜひ、紹介した書籍を手にとって理解を深めてみてください。
追記
でも、それをするにしても「これって俺が作ったっけ?」ってなりそうなので
やっぱり「my_」とかつけたくなっちゃいそうです・・・
gitを覚えましょう。
git blameを使えば、一目瞭然です。
投稿2015/12/16 17:55
編集2015/12/16 18:08総合スコア81
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/22 04:21
![guest](/img/icon/icnUserSample.jpg)
0
こんにちは。
どれがプログラム特有の命令で、どれがプログラム記述者が自由につけた変数名なのかがわかりにくいのです。
この視点重要と思います。Akagi.S.さん、良いセンスをお持ちですね。
forやifなどのキーワードは大した数ないので覚えれば良いだけですが、ライブラリはなかなかそうもいきません。
私はC++erですが、最近はライブラリ名を丸っと省略するためのusingを使わないようにしてます。
長過ぎる時は、namespace boostLC=boost::locale::conv;
などして短縮してますが、boostライブラリであることが判るようにしてます。大量のライブラリ関数やクラスを一々覚えてられないので、ググりやすいようにする工夫です。
残念ながら、C#ではusingして使うことが多く、C++程様々なライブラリがあるわけではない上、C#のライブラリは深く細分化されているので、C#の場合は使い勝手がよくないと思います。
ですので、Akagi.S.さんが工夫されているように変数名の命名規則を自分なりに定めるのは良い工夫と思います。他の人に使って貰うことまでは難しいとは思いますが、俺ルールが許される範囲で自分が使う分には問題無いです。初心者を脱出した時はまた別の俺ルールに変えていくことも有りですし。(皆さん、結局そうしてます。上記の私のルールも最近の俺ルールです。)
もし、多くの人にとっても有用な俺ルールだったら、布教できるかも知れません。(最近、私はある人の俺ルールの1つが優れていると感じて、私の俺ルールに採用させて貰ったことがあります。)
因みにVisual Studioは変数名等に漢字使えますよ。「h_速度」とか「h_数」等の変数名も可能なはずです。実際に使っている例を見たことはないですが、日本人しか読むことがあり得ないようなソース・コードならそれも有りと思います。ただ、それに慣れてしまうとワールド・ワイドなコードを書けなくなりそうなのであまりお薦めできませんが。
そもそもソフトウェア技術と文化が最も進歩している国はアメリカと思います。英語情報の質と量は凄いです。英語を読めることはプログラミング技術者の重要スキルの1つと思いますよ。
投稿2015/12/17 07:02
総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/22 05:41
![guest](/img/icon/icnUserSample.jpg)
0
そのコードに携わる人がわかりやすければそれでいいので、別に英語である必要は無いです。
様々な教科書などで「英語で書きなさい」と書いてあるのは最大公約数として英語で書くケースが多いという事だけかと思います。
日本においてプログラムの基礎を学習するのであれば
日本語プログラミング言語もありますし、最近の言語なら関数や変数にマルチバイト文字を使えることも多いです。
どれがプログラム特有の命令で、どれがプログラム記述者が自由につけた変数名なのかが
わかりにくいのです。
変数は変数であることがはっきりわかったほうが便利だと思うのです。
プログラムに慣れている人にはそんな必要ないのでしょうが…
言語によりけりですが、例えばPerlやPHPでは変数は$から始まるように文法で定義されていますので、同じように不便だと考える人が一定数居るんだと思います。
初心者のうちだけでも変数がわかりやすくするような
オススメの記述法などあったら教えていただけると嬉しいです。
記法としては、ハンガリアン記法(型を変数名の一部に使う)が分かりやすいと言えばわかりやすいかと思います。
あとは、VisualStudioやEclipseなどの高機能なIDEを使えば言語の関数や予約語とそれ以外はパッと見てわかるようになるので、そういった機能を使うのもいいでしょうし、学習段階においてはh_ という形でも特に問題無いと思います。
投稿2015/12/16 19:51
編集2015/12/16 21:54総合スコア18716
0
英語にする理由は特にないと思います。風習といいますか。
変数の命名規則は、会社やプロジェクトにコーディング規約があればそれに従う。なければご自分の自由に決めて構わないと思います。
規約は一般的に可読性や拡張性を考慮して決められていることが多いです。
言語毎にある程度一般的な命名規則があるので、最初はそれに従って書くと勉強になるかもしれません。
投稿2015/12/16 14:54
総合スコア346
0
C#のタグが付いているのでC#を前提にします
C#やプログラムに限らずもともとコンピューターはASCII文字コードしか扱えなかったのでソースコードにも英数字及び記号しか使えませんでした
ShiftJISやEUCが出てきてもコメントや文字列には使えてもあくまでも中身を解釈して同行するわけではないので変数や関数の名称には英数字しか使えませんでした
それがソースコードにUnicodeが利用されるようになってから変数や関数名にいわゆる全角文字が使えるようになりました
それでもしばらくは空白に全角を使うとコンパイルエラー(かなり探すのが面倒です)になっていましたので、基本的にはそういったミスを踏まえて全角文字を禁止しているんだと思います
ただ、例えばVS215のVC#では空白を全角にしてもコンパイルエラーが起きないのでそういった面倒は起きなくなっています
なので自分はチームで作業する場合以外は日本語を頻繁に使用しています
ただインテリセンスを楽に活用するために最初の3文字くらいは半角の文字を使用しています
理由は漢字の方が意味が分かりやすいからってだけです
英語だと後で見たときに日本語に翻訳しても意味が通じないことはよくあるためですと言ってもきちんとコメントをつけておけばインテリセンスの候補と同時に説明まで出てくるのでぶっちゃけ個人の好み程度です)
ちなみに自分は英語力に自信がないので機械翻訳で英語にしていましたがおそらくは日本語に再翻訳すると意味不明なものになっているはずなので他の人が見ても意味が通じないものがほとんどだと思っていますので無理な英語化はデメリットしかないと考えています
それとこの質問の元々の目的で自作の物かどうかが分からないということでしたが、
関数や変数にポイントすると出てくる説明でnamespaceも含めて表示されるのでそれで十分わかると思います
投稿2015/12/19 09:29
総合スコア1363
0
日本語は、漢字がないと理解しにくいことがあります。
大分前ですが、変数名に「zokugara」とあり、何のことなのか全然理解できなかったことがあります。
(「続柄」のことでした。最近は「ぞくがら」でも許されるみたいですが、昔は「つづきがら」としか読まなかったので、、、)
英語も複数の意味を持つことがありますが。
日本語よりはましだと思っています。
また、他の方も言っていますが、日本語を使う(しかできない)人より、英語を使う(しかできない)人の方がはるかに多いため、自己満足の為のシステムでなければ、英語を使った方がよいと思います。
投稿2015/12/18 00:19
総合スコア1507
0
●なぜ英語?
Windows、Apple はアメリカの会社ですよね。
つまり、英語はどうやっても避けられないのです。
コードを書くということは、何らかのプログラム言語に従って書く訳ですが、
---日本語のプログラム言語はなく、<---訂正・削除
恐らく全てのプログラム言語が英語で書かれています。
それは、世界中で使用される為に、
世界で使用頻度の高い英語が選ばれている、
という流れがあるからです。
だから、国産のRubyも英語です。
ただ、プログラムを学ぶ敷居が高い、というのは同意見です。
将来的に小学校でプログラミングを教えるようになる展開が予想されるので、
数年後には「幼稚園からのプログラミング絵本」とか出るかもしれません。
●変数を英語にすべき?
1番の理由にインテリセンスが挙げられるのではないでしょうか?
コードを書く時には英語を使うことが大前提となります。
だから、変数名が日本語から始まっていると、
開発環境のメリットであるインテリセンスが非常に使い難くなってしまい、
開発効率が落ちることが予想されます。(個人開発だとしても)
なので、最初の1文字だけは英語にすべきでしょう。
2番目の理由としては、動くこと、ではないでしょうか?
コードを学ぶ人は世界中にいます。
ということは、どんな環境でも動くプログラムが良いでしょう。
となると、公表するコードは英語にした方が「親切」ですよね。
コードを公表する人達は、その視野に世界が写っている人が多いでしょう。
だから、公表されているコードが英語になるのは必然とも言えます。
まだまだ若輩者ですので、正しく回答できているか分かりませんが、頑張っていきましょう。
投稿2015/12/17 01:22
編集2015/12/17 11:08総合スコア1175
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/17 01:23 編集
2015/12/19 09:11
![guest](/img/icon/icnUserSample.jpg)
0
英語/日本語という話より、
どれがプログラム特有の命令で、どれがプログラム記述者が自由につけた変数名なのかが
わかりにくいのです。
とのことで、
「プログラム特有の命令」っていうのが標準のライブラリを指して、
人が作ったものと自分が作ったものの区別を付けたいという話のようですが、
他の人が作ったものと自分が作ったものを区別する必要を余り感じません。
むしろ「読み込み動作」に「Read~」と「Yomikomi~」と2つの表現があったら
似たような動作なんだから同じ名前つけろよと思ってしまいます。
あと、みんながみんな自分が作った変数にh_関数にk_とマーカーつけたところで、
.net標準ライブラリ自体誰かが作ったものなので(コード見れます)
結局全部にマーカー付きます。
変数は変数であることがはっきりわかったほうが便利だと思うのです。
(ローカル)変数とそれ以外を区別したいという話なら、
C#の文脈だとローカル変数、引数は小文字始まりで、
非privateな何かは大文字始まりのことが多いです。
投稿2015/12/17 00:19
総合スコア13551
0
どれがプログラム特有の命令で、どれがプログラム記述者が自由につけた変数名なのかがわかりにくいのです。
言語のキーワードは、そう多くないので、全部覚えるのは難しくないです。
見た目ですぐ分かるように区別したいという人は、言語のキーワードだけ色が変わるエディタ(IDEなど)を使っています。
英単語が並んでいると、
日本語を使いたいということでしょうか?名前に日本語が使える環境ならそれもいいかと思います。
ローマ字は、わかりにくいですよ。
投稿2015/12/16 14:39
総合スコア85357
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/22 05:37
![guest](/img/icon/icnUserSample.jpg)
0
過去の質問です。
参考にしてください。
投稿2015/12/16 14:33
総合スコア801
0
ネットで英語圏(というかほとんど)のソースコードを参考にしようと思ったとき、または自分がソースを公開しようと思ったとき、英語であれば誰も困らないから英語であるのと、後で読み返すときのために英語にしておいたほうが無難なのです。
ローマ字で変数名を付けてちょっとでも略してしまうと、英語なら定番の略し方(widthならwなど)があるので検索できるところをローマ字だと標準的なすぐ誰でも思いつくような略が存在しないので後で自分ですら検索できなくて困ることがあります。
でも、英語だからと堅苦しく考えずCountやName程度の単語で名付けていいのです。
どうせよくできたソースだとわかりやすい命名しかされていないものですし、自身もそうなっていきます、何年かやると慣れてしまうので英語は気にならなくなります。
変数や関数の接頭ですが、私が個人的に長年使っている方法も提案してみます。
変数:v=value:例vCount
関数:m=method:例mCount()
引数:p=post:例mAdd(int pNum)//c系の古い既存ソースだとpはほぼポインタなので少し紛らわしいけど、型より用途を接頭にしたい派なので。
グローバル:g=global:例gvCount,gmCount()
ついでに、私のpもあれですが接頭hでh_だとc系のソースでハンドルの変数と被って紛らわしいと思います、後で苦労する可能性が高いのでやめといたほうがいいです。
投稿2016/10/14 07:04
総合スコア12
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
一理あると思います。ですが、扱うものによってであって、システムとして用意されているものだとか、だれかが作ったからだというので変数名を決めてしまうのはしっくりきません。
そういう区別は名前空間でOKですし、今ではIDEなんかの機能を使えば言語特有のキーワードなどは色分けされたり、
定義元を参照したりすることも容易に行えます。
英語が用いられるのは、例えばgithubなんかを使って公開するのであれば日本語ではなく英語の方がより多くの人に見てもらえるだとかもありますし、業界標準の常識的な英語を使うのが無難だからですね。
例えば日本人チームで医療系の帳票作成のシステムを構築することを考えてみると
チェックを行う場合は if( isHOGEHOGE )みたいに先頭にisをつけたり、ゲッターセッターパターンを使う場合は int GetMember() SetMember(int value)と書いたりしますが
介護保険番号を扱う変数はどのようにすればよいでしょうか。
int CareInsuranceNumber と定義することもできますが
int KAIGOHOKEN_NO と書いてしまった方がよいと個人的には思います。
理由としては日本人チームで書いているので英語に詳しくない人がメンバーにいるであろうことなどが容易に想像できるからです。
CareInsuranceNumberのように英語化してしまうとその他複雑な用語も英語にする必要が出てきますし、そのたびにそれを考えなければいけない、覚えなければいけないというコストが発生します。
介護保険番号の場合にはCareInsuranceNumberで通すとして、じゃあ次に、"廃用症候群評価表"や"掛かり付け医"、"要介護度"などの単語が出てきたら?
それらをわざわざ英語化してすべて覚えておくよりも、もっと日本人がパッと見てわかる名前をつけた方が効率がいいと思います。
ついでにこの場合DBからとってきた値をどうにかするのだとかが容易に想像ついたりしますしね。
あえて英語化するのはカッコつけだし周りをその土俵に引き込んでしまいまい悪手だと思っています。
またこの場合はIDやNOなどそこはカッコつけとけよって場合もあります。KAIGOHOKEN_BANGO これでは違和感が残りますしね。
あとはどの程度日本語でどの程度英語にすればいいのかの見極めはプロジェクトの方針でってことでしょうか。
ちなみに、h_などの名前を先頭につけておくのもアリです。
クラスのメンバーならば m_HOGEHOGEだとか、ポインターを表す場合はp_HOGEHOGEはよくあるパターンです。わざわざ定義元を参照しなくてもどういうものなのかがわかります。
末尾や先頭にどういう属性を持っている変数なのかを示すというのはハンガリアン記法ですね。
投稿2015/12/22 04:45
総合スコア161
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
フリーでやっているのでいろいろな職場で働いています。
あるパッケージのバージョンアップでAL32UTF8(Unicode)にしか対応しなくなり、
Oracle 10.2.0 JA16SJIS(SJIS) → Oracle11.2.0 AL32UTF8 の担当にされた時、
Unicode では半角カタカナとマルチバイト文字が1文字3バイト(1文字4バイトもあるらしい?)
になるので文字列が桁あふれする可能性が出てくるので、あらかじめテーブルやプログラムの
文字型変数の桁数を見直さなければならないが、それ以前に、マルチバイト文字を11文字以上で
設計した、テーブル名、列名などが30バイト以上になりエラーが多発。
Oracle データベース・オブジェクトのネーミング規則
地獄でした。
投稿2015/12/16 23:27
総合スコア16415
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/17 00:32
2015/12/22 04:41
![guest](/img/icon/icnUserSample.jpg)
0
命名規則で何つけるのがいいか困った時は、みんながよく使うネーミングを日本語から変換してくれるツールあるので、
参照してみるといいかもです。
https://codic.jp/engine
投稿2016/09/30 02:05
総合スコア94
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
日本語というのが仮名漢字で書きたいということなのかローマ字ということなのかわかりませんが、いずれにせよ、実際に書いてみてメリットとデメリットを実感していただくのが一番なのですが。
個人的に仮名漢字の変数名を試してみたことがありますが、変数を書くたびに入力を切り替えるのが煩わしくて、こりゃやってられねーわ、となって諦めました。変数名を書こうとするたびに入力を切り替えるのは実際にやってみるとけっこうな負担でした。
ただ、この辺は感覚差もあるかと思います。全然苦にならない、という方もいるでしょうから、その場合はそのままの勢いで学習を進めてしまっても良いんじゃないかなと思います。言語の仕様としてマルチバイト文字で変数名を命名できる場合は(個人のプログラミングならば、という前提は付きます。チームでの開発となるとまた話は別ですが)それを使うことをためらう理由はないでしょう。
ローマ字となると、あとから読んだ時にぱっと見て何語なのかわからないような語が多くなり、かえって読みづらくなりがちですし、表記の揺れが大きいので、おすすめしません。が、これも個人差があるかもしれません。
投稿2015/12/24 16:36
総合スコア25
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
どれがプログラム特有の命令で、どれがプログラム記述者が自由につけた変数名なのかがわかりにくいのです。
つまり、関数と変数の区別が付きづらいって事ですね。
私はPerlから入ったので(Perlは変数に$が付きます)、
他言語使った時に読みづらさを感じました。
しかし実際は別の手段で区別が付くようになっています。
例外は有りますが
普通は関数は動詞で変数は名詞で書かれます。
それが分かると記号が無くてもすんなり読めるようになりました。
名前はとても重要ですので、
変数等の名前の付け方のコツを調べてみることをオススメします。
投稿2015/12/22 12:56
総合スコア10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
言語によりけりですが、Javaなどでは、マルチバイト文字を変数名などに使えるのですが、ファイル名に直結するため、OS依存になってしまい、正しく動かないといったことがあります。
あと、漢字ばかりだと、お経なのか、中国語なのか…となったり。
ローマ字表記は、他の方も書かれているように、ごく稀に使うことがある程度で、基本的には英語です。
ローマ字だと、日本語での単語区切りが分かりづらくて読み辛いとか起こりやすいです。
言語組み込みだったりするキーワードやライブラリーとの区別が付きづらいという件ですが、言語にもよりますが、名前の付け方を工夫するくらいだと思います。
Javaなどの場合は、パッケージ名で明確に分かれるので、そのクラスのパッケージ名を調べればわかりますし、C言語のように、名前空間がない場合以外は、何らかの区別の仕方があるはずです。
オブジェクト指向言語で、メソッドのオーバーライドとかする場合、元々あるライブラリーのメソッドを上書きするため、逆に、同名にしなければならないですし、結局は、言語と設計次第なのかと思います。
Javaの場合、以下のようなパターンは普通にあります(しかも、javaから始まるパッケージ名なので、ビルドインライブラリーです)
java.util.Date
java.sql.Date
C言語でも、大抵は
shem_get といったように、アプリケーションハンガリアンで区別出来るようにしていることが多いと思います。
なので、言語毎に、「こういう風にして区別する」という定石はあると思うので、それを調べて使いこなせるようになることが、プログラミングのノウハウの一つだと思います。
投稿2015/12/22 06:46
総合スコア30
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんにちは。わたしもC#を独学しました。
最近は英語で書きます。略語は使わず、ほぼフルに単語を使用しています。
最初は、漢字(ひらがな・カタカナ)を使いました。
program中で、自分のつけた変数を、一目瞭然で把握できます。
それだけで可読性がアップします。
1-2年はそれでよいと思います。
programに慣れてくれば、変数とそれ以外を次第に容易に区別できるようになります。
それまでは漢字を使うのもありだと思います。
ローマ字は読みにくくて最悪です。
と思ったら、いま3人のチームでC#を書いてますが、ばりばり変数に漢字使ってました。
int textbox幅 = 140;
とか。
もちろん
int textboxwidth = 140;
でもいいけど、格段にわかりやすいかと。
投稿2015/12/22 06:09
![退会済みユーザー](https://ddjkaamml8q8x.cloudfront.net/profileImages/deletedUser/icnUserSample.jpeg)
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/16 15:35
2015/12/16 23:12
2015/12/21 16:42
2015/12/22 08:57
2016/09/03 09:11