アンダースコア・ダッシュ・大文字を使って名前に情報を詰め込むこともできる。
k
を使うパターンがある。これを使うと定数とマクロ定義を区別できる。static const int kMaxWindowHeight = 500
#define MAX_WINDOW_HEIGHT 500
class Person
{
private:
string name_;
public:
Person(string name) : name_(name) {}
string who_are_you()
{
string message = “My name is “ + name_ + “.”;
// messageはローカル変数で、name_はメンバー変数とすぐわかる
return message;
}
}
class person:
def __init__(self, name: str, old: int):
self._name: str = name
self._old: str = old
total_count: int = 0
def count(num: int) -> int:
total_count += num
return total_count
person1 = person(“kj”, 30)
count1 = count(1)
class Point:
pass
# 本当はちゃんと実装
def ComputeDistance(point0: Point, point1: Point) -> float:
# … 計算
return distance
point0: Point = Point()
Point1: Point = Point()
Distance = ComputeShortestDistance(point0, Point1)
class Widget:
def __init__(self, name: str, x: int, y: int, width: int, height: int):
self.id: UUID = uuid4()
self.name: str = name
self.x: int = x
self.y: int = y
self.width: int = width
self.height: int = height
def _calc_area(self) -> float:
return width * height
widget: Widget = Widget(“Sample Dialogue”, 0, 0, 100, 50)
area: float = widget._calc_area()
widget.id = uuid4()
MAX_POSITION_X: int = 1000
maxpositiony: int = 1000
MINPositionX: int = 0
min_position_y: int = 0
class Widget:
def __init__(self, name: str, x: int, y: int, width: int, height: int):
self.id: UUID = uuid4()
self.name: str = name
self.x: int = min(max(x, MINPositionX), MAX_POSITION_X)
self.y: int = min(max(y, min_position_y), maxpositiony)
self.width: int = width
self.height: int = height
def _calc_area(self) -> float:
return width * height
クラスの名前には通常 CapWords 方式を使うべきです。 https://pep8-ja.readthedocs.io/ja/latest/#section-26
# クラスの名前はCapWords(=キャメルケース)を使う。
#class person:
class Person:
def __init__(self, name: str, old: int):
self._name:str = name
self._old:int = old
total_count: int = 0
def count(num: int) -> int:
total_count += num
return total_count
# クラスの名前はCapWords(=キャメルケース)を使う。
# 元の場合、関数と見分けがつかない。
# person1: Person = person(“kj”, 30)
person1: Person = Person(“kj”, 30)
count1: int = count(1)
関数の名前は小文字のみにすべきです。また、読みやすくするために、必要に応じて単語をアンダースコアで区切るべきです。変数の名前についても、関数と同じ規約に従います。
class Point:
pass
# 本当はちゃんと実装
# 関数の名前は小文字のみにする。
# 読みやすくするために必要に応じてアンダースコアで区切る。
# 要するにスネークケース
# def ComputeDistance(point0: Point, point1: Point) -> float:
def compute_distance(point0: Point, point1: Point) -> float:
# … 計算
return distance
point0: Point = Point()
# 変数名もスネークケースで
# Point1: Point = Point()
point1:Point = Point()
# ルール守ってたり守ってなかったりバラバラだと統一感がなくて読みにくい
# ルールを守っていないと、何か意図があるのかと勘ぐってしまう
# Distance = ComputeShortestDistance(point0, Point1)
distance: float = compute_distance(point0, point1)
関数の命名規約を使ってください。つまり、名前は小文字のみにして、読みやすくするために必要に応じて単語をアンダースコアで区切ります。公開されていないメソッドやインスタンス変数にだけ、アンダースコアを先頭に付けてください。サブクラスと名前が衝突した場合は、Python のマングリング機構を呼び出すためにアンダースコアを先頭に二つ付けてください。
class Widget:
def __init__(self, name: str, x: int, y: int, width: int, height: int):
# idは非公開情報
# self.id: UUID = uuid4()
self._id: UUID = uuid4()
self.name: str = name
self.x: int = x
self.y: int = y
self.width: int = width
self.height: int = height
# 公開メソッド
# def _calc_area(self) -> float:
def calc_area(self) -> float:
return width * height
# idを読み込みのみ可にする
@property
def id(self) -> UUID:
return self._id
widget: Widget = Widget(“Sample Dialogue”, 0, 0, 100, 50)
area: float = widget.calc_area()
#idに書き込もうとするとerror
#widget.id = uuid4()
定数は通常モジュールレベルで定義します。全ての定数は大文字で書き、単語をアンダースコアで区切ります。例として MAX_OVERFLOW や TOTAL があります。
MAX_POSITION_X: int = 1000
MAX_POSITION_Y: int = 1000
MIN_POSITION_X: int = 0
MIN_POSITION_Y: int = 0
# 区切りがなくて読みにくい
# maxpositiony: int = 1000
# 書き方にルールがなくて読みにくい
# MINPositionX: int = 0
# スネークケースは変数名のルールなので、変数に見えてしまう
# min_position_y: int = 0
class Widget:
def __init__(self, name: str, x: int, y: int, width: int, height: int):
self.id: UUID = uuid.uuid4()
self.name: str = name
self.x: int = min(max(x, MINPositionX), MAX_POSITION_X)
self.y: int = min(max(y, min_position_y), maxpositiony)
self.width: int = width
self.height: int = height
def _calc_area(self) -> float:
return width * height