質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

4148閲覧

コード内の表記の揺れをどうしたらいいのでしょうか。

PotePui

総合スコア69

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/07/21 15:32

編集2020/07/21 15:33

例えば、Oculus Integration アセット内にAttachされているスクリプトには、

メンバー変数に、

private float m_Teratails = 0.0f;

と記載されています。
会社内では表記の揺れに厳しくて、基本統一させるのですが
そのせいもあり、最近ではメンバー変数にm_のPrefixを付けるようになりました。

問題は、1文字だけの変数の場合です。以下コードを参照。

private float m_x = 0; private float m_z = 0; void update{ m_x = Input.GetAxis("Horizontal"); m_z = Input.GetAxis("Vertical"); }

これをVector3で記載すると

void FixedUpdate(){ Vector3 direction = new Vector3(m_x, 0, m_y); }

のようになってますが、これは気にしないでいいのでしょうか。

ちなみに少し前のPrefixはアンダーバーのみで、_x,_zとしていました。
これだと、表記の揺れがUnity社さんのとあるので少しだけ気になりました。

会社の命名規則に従えって言われればそれまでですが、普段皆さんはどちらを使用されるのが多いのか聞いてみたかったです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

逆に、どうして変数名が1文字(m_を足して3文字)の時だけ気になるのかがわかりません。
ところで、命名規則は矛盾なく守りやすいものを作るのは難しく、大抵は守れないか、守るのが面倒です。

例えばマイクロソフトの推奨するガイドラインは以下になります。

  1. プロパティの先頭は大文字
  2. 変数の先頭は小文字
  3. メンバ変数にプレフィックスは付けない

これらを守るとメンバ変数を public にすることができず、必ずプロパティとして値を get/set しなければなりません。また長い関数を見てしまった場合、どれがメンバ変数なのかわからないのでコードをいじるのが怖くなりますね。

一方 Unity Technologies ではメンバ変数には m_ をつけますね。それは Inspector の振舞いや、彼らの書いたコードをみるとわかります。また、最近はプロパティの先頭を大文字にするようにしていますが、Rigidbody コンポーネントなど古くからあるクラスを見るとプロパティの先頭が小文字です。これはもう直せませんね。また CinemachineVirtualCamera クラスには m_priority なんてプロパティもあります。

ということで、Unity Technologies でも命名規則を守り切れてないのが実情です。

私はどうしているかというと、メンバ変数には m_ をつけます。「メンバ変数として宣言した、あの変数の名前なんだったっけ」って時に m_ と入力すれば候補が出るので楽ですよね。_ は C の時は元のコードがそういう風に書かれていたらそうしますけど、あまり好みではありません。__ とか ___ などいくつも重ねられた時にいくつ重なっているのかぱっと見でわからないからです。

私としては、命名規則があればそれに従い、また C の時は C のルール、C# の時は C# のルールで書きますが、C# も C のルールで書くべきだという人がいると、ちょっと面倒だなと思いますね。
命名規則があって、それが気になる場合は、どうしてそうしたんですか?と一応は聞きます。あるなら守りますけど。

投稿2020/07/21 16:15

編集2020/07/21 16:22
bboydaisuke

総合スコア5308

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bboydaisuke

2020/07/21 16:20

m_x よりも、 > private float m_Teratails = 0.0f; の T が大文字であることの方が気になります(笑
PotePui

2020/07/21 17:38

なるほど! すごく参考になりました。 m_xが気になるのは、よく参考書でプレフィックスを付けていないのがほとんどなので、 変数が長くなりすぎかな?と思っていたからです。 _xでも2バイトでm_xだと3バイトなので、ってそこだけでした。 ご指摘の変数は、別の方がキャメルではなくパスカルで変数を記載しているのを見ていたからです。 具体的には上記変数でいうと、 m_TeraTail とか m_RotateSpeed, m_RigidBodyとかです。ベストアンサーにさせていただきました!
bboydaisuke

2020/07/21 17:44

参考書のレベルにもよりますけど、Unity 参考書くらいではプレフィックスとか必要ないのでつけないと思います。ついてたら「何これ?」って混乱するでしょうし、説明しても読者は混乱すると思います。それぞれのケースに適したルールがあるということでよいと思います。
bboydaisuke

2020/07/21 19:08 編集

> 変数が長くなりすぎかな?と思っていた 私の場合は、変数名は(クラス名やメソッド名も)長くなってもよいので名前で意味がわかるようにして欲しいです。 Cinemachine はこれ https://docs.unity3d.com/Packages/com.unity.cinemachine@2.1/api/Cinemachine.CinemachineVirtualCameraBase.html を見るとすごく長いですけど、意味がわかるので私としてはこちらの方がありがたいです。 あとはきちんとメンバ変数やメソッド、クラスには XML コメント(/// と入力すると出るやつ)をつけて欲しいですね。それがあればコード入力中にそれが何のためにあるのかわかります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問