質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1300閲覧

Swift Nested typesを使用するメリットについて

moriman

総合スコア615

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2020/02/04 03:28

https://docs.swift.org/swift-book/LanguageGuide/NestedTypes.html
上記ページを読んでいて、Nested typeを使わないとどうなるのか、全部外に出してやってみたんですが、

struct Values { let first: Int, second: Int? } enum Suit: Character { case spades = "♠", hearts = "♡", diamonds = "♢", clubs = "♣" } enum Rank: Int { case two = 2, three, four, five, six, seven, eight, nine, ten case jack, queen, king, ace var values: Values { switch self { case .ace: return Values(first: 1, second: 11) case .jack, .queen, .king: return Values(first: self.rawValue, second: nil) default: return Values(first: self.rawValue, second: nil) } } } struct BlackjackCard { let rank: Rank, suit: Suit var description: String { var output = "suit is (suit.rawValue)," output += " value is (rank.values.first)" if let second = rank.values.second { output += " or (second)" } return output } } let a = BlackjackCard(rank: .ace, suit: .diamonds) print("theAceOfSpades: (a.description)") //theAceOfSpades: suit is ♢, value is 1 or 11

普通に動きました。Nested typeを使うメリットというのは、

入れ子にしてまとめた方が、読み手が、この型の中で使う型なんだな、というのがわかりやすい、
つまりコードが読みやすい。

ということだけでしょうか?ページの一番最後に、この書き方で入れ子の型のケースが参照できて、便利ですね。
みたいなことも書いてあり、それも一応メリットだとは思うのですが、
「この場合はNested typeを使わないとできない」みたいなことはなくて、
ただコードが読みやすい、わかりやすい、ということだけでしょうか?

もちろんコードがわかりやすいのは非常に重要なことだと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ネストすると、スコープが限定されるというのが利点だと思います。

 例えば、カードゲームで勝ち続けるとプレイヤーのランクが上がるというゲームを作ったとすると、カードの数値を表すRank型とプレイヤーのランクを表すRank型が重複してしまいます。
この場合でも、ネストしていればどちらのRankかすぐわかります。もちろん、CardRankとPlayerRankのように、型名を変えればよいだけなので、どちらを採用するかはプログラマー次第ですが。

投稿2020/02/04 03:54

編集2020/02/04 03:55
AOKINAO

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moriman

2020/02/04 06:31

なるほどですね。それは確かにメリットですね。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問