質問: name } func introduce() { print("俺はロックな男。その名も、\(name)!")// -> 俺はロックな男。その名も、(それぞれの名前)! } } for name in ["カールスバーグ宮崎", "ヤスオ", "ジョセフ伊藤", "エンジェル桜木"] { RockGuy(name: name).introduce() } ```
回答: > > 1.ここでいう静的ってどういう意味なのか。 > > (いつも同じ結果になる静的なコードと、状況によって違う結果を出す動的なコード、といった類の話は分かります) > > 2.static があると何が嬉しいのか。 > > 3.どういう時は static を使うべきなのか。 > > > すべてのインスタンスで共通な変数はstaticを付けないと、インスタンスの生成のたびにインスタンスの個数分データがメモリに書き出されるのでメモリの無駄使いになります。 インスタンスメソッドの場合は、インスタンスからメソッド定義への参照を保持するだけなので、たいしたオーバーヘッドにはなりませんが、インスタンスの状態に依存しない処理であることを明確にできます。逆にインスタンスの状態に依存する処理をstaticに定義することはレシーバで複数のクラスのインスタンスが絡む処理をのぞいて基本的にないです。 また、staticなメソッドは実行前にメモリや値が確保できているどうかを検証しているため、実行前にバグがないかをある程度検証できます。staticな関数の中で、staticではない変数(つまりインスタンス変数)などを記述した場合、それらはインスタンスが生成されるまで使えない変数なので、IDEなどで、エラーを教えてくれます。 つまり、変数の場合は実際にパフォーマンスに影響して、関数の場合は、そのコードを読む人にインスタンスの状態依存の処理ではないことを明示的に伝えたいときや、staticな処理に対して誤って動的なパラメータを記述してしまうミスを防ぐために書いたほうがいいものです。