私は Swift でアプリを作っています。
static という言葉が、どういう思想のものなのか分からなくて、もやもやしています。
どういう挙動をするかは調べたら色々と調査してもらっている記事があったのですが、何故 Swift がこういう機能を提供しているのかが分かりません。
例えば、こういう風に、インスタンスを作らなくても static なら呼べる、という挙動はなんとなく分かります。
Swift
1class StaticGuy { 2 static var name = "staticな男" 3 static func introduce() { 4 print("私は\(name)") 5 } 6} 7 8class NormalGuy { 9 var name = "普通の男" 10 func introduce() { 11 print("私は\(name)") 12 } 13} 14 15StaticGuy.introduce() // -> 私はstaticな男 16NormalGuy().introduce() // -> 私は普通の男
でも、こういうことは分かりません。
0. ここでいう静的ってどういう意味なのか。
(いつも同じ結果になる静的なコードと、状況によって違う結果を出す動的なコード、といった類の話は分かります)
0. static があると何が嬉しいのか。
0. どういう時は static を使うべきなのか。
例えが適切か分かりませんが、知りたいのはこういうことだと思います。
例|知りたい
Android は「みんな違うから世界は楽しい」というコンセプトだから、色んな端末で動くように、Google が作っている。
例|知りたいことではない
Androidは、色んな端末で動く。
あまり他の言語に精通していないので、できれば Swift の例だと助かりますが、もし他の言語でも考え方のご説明をいただけますと嬉しいです。
上手に聞きたいことを伝えられなくて大変恐縮ですが、「おそらくこういうことが聞きたいのだろう」と思ってくださった方は、お知恵をお貸しいただけますととても助かります。
よろしくお願いいたします。
追記
皆様、ご回答ありがとうございます! おかげさまで大分理解が進んだ気がします。
(どのご回答もとても的確で理解を深めていただいて、ベストアンサーを選ぶのが難しかったのですが、私のレベルで一番理解しやすかったという観点で選出させていただきました)
こういう認識で合っていますでしょうか?
Swift
1// MARK: 1. 普通の場合 2class NormalGuy { 3 var name = "普通の男" 4 func introduce() { 5 print("私は\(name)なので、たくさん生成すると、メモリがとんでもないことになります。")// -> 私は普通の男 6 } 7} 8 9// これは無駄にメモリの負担が大きい。 10for _ in 1...100 { 11 NormalGuy().introduce() 12} 13 14 15 16 17 18 19// MARK: 2. static を使った場合 20class StaticGuy { 21 static var name = "staticな男" 22 static func introduce() { 23 print("ふはははは! いくら私を生成しようとも、メモリの負担はあんまり大きくないぞ!! 何故なら私は\(name)だから!")// -> 私はstaticな男 24 } 25} 26 27// これは、MARK1 よりもメモリの負担が少ない。 28for _ in 1...100 { 29 StaticGuy.introduce() 30} 31 32 33 34 35 36 37// MARK: 3. static を使えない場合 38// ロックな人は、みんなと同じであることが耐えられないので、名前を個別に設定したい。 39// この場合は、やりたいこと的に static にできない。 40class RockGuy { 41 var name: String 42 init(name: String) { 43 self.name = name 44 } 45 46 func introduce() { 47 print("俺はロックな男。その名も、\(name)!")// -> 俺はロックな男。その名も、(それぞれの名前)! 48 } 49} 50 51for name in ["カールスバーグ宮崎", "ヤスオ", "ジョセフ伊藤", "エンジェル桜木"] { 52 RockGuy(name: name).introduce() 53}

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/02 08:20