2016-05-09 10 views
0

Java、PHP、Swiftなどの言語では、包含するクラスの特定のインスタンスへの再帰的ポインタであるthis,$this、およびselfなどのキーワードがあります。 JavaとSwiftの両方は、他のローカル変数が同じ識別子を共有していない場合、プログラマはこのステートメントを完全に省略することができます。私の質問は、プロダクションでこれを書くために推奨される方法は何ですか?たとえば、生産現場のプログラマが不要な場合にselfを省略することは可能ですか?クラスプロパティgetter/setterの適切なプロダクション実装

var name: String = "" 

init(name: String) { 
    self.name = name 
} 

func doSomeMethod() { 
    print(name) 
} 

または

var name: String = "" 

init(name: String) { 
    self.name = name 
} 

func doSomeMethod() { 
    print(self.name) 
} 

答えて

1

proposal on the swift-evolution repositoryには、インスタンスプロパティにアクセスするときにselfが必要です。それは常に必要とすることに対してかなり説得力のある議論をしています。

+0

私はSwiftの厳密さが本当に好きです。私は、実際のプロジェクトはいくつかの "生産コード"標準に準拠する必要がありますが、遊び場には "怠惰なコード"を許可するべきだと感じています –

+1

提案は1月に却下されました。 –

+0

@robmayoff、oops、私も気付かなかった! D: – Alexander

2

ドキュメントは非常によく

自己プロパティを、それを説明するように、一般的には、インスタンスのプロパティにアクセスする際に、生産内の現像剤が常にself句を使用する必要があります

タイプのすべてのインスタンスには、selfという暗黙のプロパティがあります。 は、インスタンス自体とまったく同じです。 self プロパティを使用して、独自のインスタンス メソッド内の現在のインスタンスを参照します。

上記の例ではincrement()方法(リンクガイドの例を参照)は、このよう を書かれている可能性:

func increment() { 
    self.count += 1 
} 

実際には、あなたがでselfを記述する必要はありませんあなたのコードは非常に頻繁にです。 selfを明示的に記述しない場合、Swift は、 メソッド内で既知のプロパティまたはメソッド名を使用するたびに、現在の インスタンスのプロパティまたはメソッドを参照していることを前提としています。この仮定は、Counterの3つのインスタンスメソッド内でcount(むしろ よりもself.count)の使用によって実証されます。 Counterは、セクションで言及したクラスです)です。

このルールの主な例外は、 インスタンスメソッドのパラメータ名がそのインスタンスのプロパティと同じ名前である場合に発生します。 では、パラメータ名が優先され、より修飾された方法でプロパティを参照するのに必要なのは になります。 selfプロパティを使用して、パラメータ名と プロパティ名を区別します。

出典:The Swift Language Guide: Methods

2

私は常に、生産コードでこのを使用しての大ファンです。

放出される機械コードには何の影響もなく、他のツールのバラエティをより容易にすることとは対照的に、プログラマーにとっては無意味です。 (コード検索ツール、糸くずタイプツールなど)

また、愚かな誤植を避けるために保存された時間は、入力時に保存された時間よりもはるかに長くなります。

関連する問題