狠狠撸

狠狠撸Share a Scribd company logo
名前付け入门
黝(@zakuro9715)
自己紹介
? 黝(@zakuro9715)
? ANCT 都市システム工学科 2年3年
? ゲーム創作研究部部長
? Web系(Railsできません)?ゲームプログラミング?作曲?
デザイン?モデリング?その他手広くやってます
? Python3始めました
すきな言語
Python / Fortran / C# / Go言語
Ruby / Perl
FORTRAN
きらいな言語
やったこと
? JOI2013/2014本選(出ただけ)
? SuperCon2013本選(出ただけ)
? 近畿高専総体3位(微妙)
やってること
? スカゼミで競技プログラミングと作曲の講師してます
? セキュリティスペシャリストの勉強
? C++ de ゲームプログラミング
? FORTRAN / Fortran
? ゲームプログラミング(C# + XNA / C# + Unity / Boo + Unity)
? Webバックエンド(Python + Django / Go言語)
できること
スカゼミに参加しよう(宣伝)
? 一緒にすれば、なんだってできるSNS「スカゼミ」
? セミナーを開いて得意なことを教えたり、勉強したいことを
一緒に勉強したり
? メンバーは200名以上 様々な分野のプロも参加しています
? 大手企業とも交渉中 お仕事を斡旋してもらえるかも
スカゼミ
アジェンダ
1.名前付けのスタイル
2.単语の选び方
3.まとめ
4.おまけ
Q. 名前なんてどうでもいいよ
動けばいいじゃん
A. 仰るとおりです
でも…
これでも名前がどうでもいいと言えますか
Button1.clicked += (sender, e) =>
{
label2.Text = textbox1.Text;
Button1.Text = “OK”;
}
1
2
3
4
5
名前も大事ですよね
名前も大事ですよね
はい
Yes
名前付けのスタイル
名前付けのスタイル
?UpperCamel
?lowerCamel
?snake_case
?SCREAMING_CASE
UpperCamel
? 別名PascalCase
? 単語の先頭を大文字にする
? メソッドやクラス、名前空间に使われることが多い
lowerCamel
? 単にCamelCaseとも言う
? 単語の先頭を大文字にするが、変数名の先頭だけは小文字
? 変数名やメソッド名に使われることが多い。
snake_case
? アンダーバーが蛇っぽく見えるから?
? 単語の間をアンダーバーで区切る
例
namespace NameSpace
{
class ClassName
{
int fieldName;
static const int constField = 0;
void MethodName(int localVar){}
}
}
1
2
3
4
5
6
7
8
9
例
namespace NameSpace
{
class ClassName
{
int fieldName;
static const int constField = 0;
void MethodName(int localVar){}
}
}
1
2
3
4
5
6
7
8
9
UpperCamel
例
namespace NameSpace
{
class ClassName
{
int fieldName;
static const int constField = 0;
void MethodName(int localVar){}
}
}
1
2
3
4
5
6
7
8
9
lowerCamel
UpperCamel
例
namespace nameSpace
{
class ClassName
{
int fieldName;
static const int constField = 0;
void methodName(int localVar){}
}
}
1
2
3
4
5
6
7
8
9
例
namespace nameSpace
{
class ClassName
{
int fieldName;
static const int constField = 0;
void methodName(int localVar){}
}
}
1
2
3
4
5
6
7
8
9
UpperCamel
例
namespace nameSpace
{
class ClassName
{
int fieldName;
static const int constField = 0;
void methodName(int localVar){}
}
}
1
2
3
4
5
6
7
8
9
lowerCamel
UpperCamel
例
namespace name_space
{
class class_name
{
int field_name;
static const int CONST_FIELD= 0;
void method_name(int local_var){}
}
}
1
2
3
4
5
6
7
8
9
例
namespace name_space
{
class class_name
{
int field_name;
static const int CONST_FIELD= 0;
void method_name(int local_var){}
}
}
1
2
3
4
5
6
7
8
9
snake_case
例
namespace name_space
{
class class_name
{
int field_name;
static const int CONST_FIELD= 0;
void method_name(int local_var){}
}
}
1
2
3
4
5
6
7
8
9
SCREAMING_SNAKE
snake_case
比較
パターン 例
UpperCamel(Pascal) AkashiKosen
lowerCamel akashiKosen
snake akashi_kosen
SCREAMING_SNAKE AKASHI_KOSEN
どれつかえばいいの?
どれつかえばいいの?
→なんでもOK!
ただし…
名前付けのスタイル
? 基本的にはなんでもいいけれど、良くないスタイルもある
? 定数?マクロ以外のSCREAMING_SNAKEとか
? 见た目が気持ち悪くなければたぶん翱碍
言語仕様と名前付けのスタイル
? 名前付けのフォーマットが言語仕様によって束縛される場合
がある
言語 例
Go 大文字から始まるとpublic
Python _から始まるとprivate
Ruby 大文字から始まると定数
単语の选び方
どんな値が入る変数か、わかりますか
double tmp = 0.0;1
ではこれならどうでしょう
double average(vector<int> data){
int tmp = 0;
for(auto d: data)
tmp += d;
return tmp / (double)data.size()
}
1
2
3
4
5
6
こうすればもっとよくなります
double average(vector<int> data){
int sum = 0;
for(auto d: data)
sum += d;
return sum / (double)data.size()
}
1
2
3
4
5
6
意味のない名前
? tmpなどの意味のない名前は使わないほうが良い
? 特に、他に良い名前が見つからないから、という理由では使
わない
? 使うなら、なぜ使うのか説明できるようにしよう
tmp
? tmpには使うべき時もある
? その変数が、一時的に値を保存するという意味しか持たない
場合はtmpを使うべき
tmp
? a, bという2つの変数の中身を入れ替える
tmp = a;
a = b;
b = tmp;
1
2
3
tmp
? この例だと、tmpはaの値を一時的に保存する、という役割
しか持たない。
? いつでもtmpを使って良いということではない。最初に上げ
た例のような場合は、もっと適切な名前がある
int tmp = 0;
for(auto d: data)
tmp += d;
return tmp / data.length();
1
2
3
4
ループカウンタ
? i, j, kなどは、一見意味のない言葉に見えるが、これらはルー
プカウンタである、という意味を持っている
? ただ、単純にI, jと使うのではなく、よりわかり易い名前をつ
けるべき
ループカウンタ
? aのループカウンタをai, bのループカウンタをbiとしている
? 単純にi, jとつけるよりもよりわかりやすい
for(int ai = 0; ai < an; ai++)
{
for(int bi = 0; bi < bn; bi++)
{
// do something
}
}
1
2
3
4
5
6
7
メタ構文変数
? foo, barなどのメタ構文変数には、意味が無いという意味が
ある
? サンプルソースなどで、意味のないコードを書くときなどに
使う
Flag
? 読みやすいのはどっち?
if(foo_flag)1
if(is_foo)1
名前と役割
? メソッド、フィールドなど、識別子の役割によってつけるべ
き名前も変化する
メソッド?関数
? メソッドは、何かをする
? 名前は動詞から始めると良いことが多い
getter
? Getterのgetは自明なので省略してもよい
? Go言語ではgetを省略することが推奨されている
? 省略するのを嫌う人もいるので注意
int GetNumber();1
int Number();1
CovertToString
? ToStringで意味はわかるので、Convertをつけるのは冗長
? 多くの言語で、ToStringが採用されている。
string ConvertToString();1
string ToString();1
真偽値
? 真偽値を表す変数?関数には、Yes(true) or No(False)で答え
られる名前をつけよう
bool running;1
bool is_running;1
bool run;1
真偽値
? 真偽値を表す変数?関数には、Yes(true) or No(False)で答え
られる名前をつけよう
bool running;1
bool is_running;1
bool run;1
動名詞(実行すること)
→Yes or Noで答えられない
変数
? 変数、フィールド、プロパティには状態を保存するもの
? 名詞を使うようにしよう
まとめ
チームの规则に従う。以上
まとめ
? その名前を採用する積極的な理由を探そう
?それ以外思いつかなかった、のような消極的な理由はダメ
? 絶対OKなパターンはない。状況に応じて臨機応変に
おまけ
日本语识别子、使ってますか
日本語識別子 on Unity
public string 名前;
public string コメント;
public string Name
{
get { return 名前; }
set { 名前 = value; }
}
public string Comment
{
get { return コメント; }
set { コメント = value; }
}
1
2
3
4
5
6
7
8
9
10
11
12
public string 名前;
public string コメント;
public string Name
{
get { return 名前; }
set { 名前 = value; }
}
public string Comment
{
get { return コメント; }
set { コメント = value; }
}
1
2
3
4
5
6
7
8
9
10
11
12
エディタに表示される名前
public string 名前;
public string コメント;
public string Name
{
get { return 名前; }
set { 名前 = value; }
}
public string Comment
{
get { return コメント; }
set { コメント = value; }
}
1
2
3
4
5
6
7
8
9
10
11
12
エディタに表示される名前
コードからアクセスしやすいように
プロパティで隠蔽
デザイナーに优しいプログラミングを
ご静聴ありがとうございました

More Related Content

名前付け入门