Avatar
@basashi
swiftは関数型プログラミングを意識していると思うのですが,switchやifで値を返してくれないのがswiftに対する大きい不満点です.
僕は Swift はあまり関数型ではないと思っています。特に、イミュータビリティに対する考え方が異なります。 Swift はイミュータブルクラスの代わりにミュータブルな struct を使うことが多いです。 // イミュータブルクラス final class User { let age: Int = 0 } var user = User() // 年齢を 1 増やす user = User(age: user.age + 1) // struct struct User { var age: Int = 0 } var user = User() // 年齢を 1 増やす user.age += 1
(edited)
8:24 AM
if 文の例で考えると、↓のような違いが生まれます。 // イミュータブルクラス user = if ... { // if 式がほしい User(age: user.age + 1) } else { User(age: user.age + 2) } // struct if ... { // if 文で十分 user.age += 1 } else { user.age += 2 }
8:26 AM
if が式でなく文なのはミュータブルな値型( struct )を多用する Swift と馴染んでおり、適切な言語仕様ではないかと思います。 (edited)
8:29 AM
なお、ミュータブルな値型のインスタンスは共有することができないので(ミュータブルクラスのインスタンスではこれが可能なのでイミュータブルクラスを使いたい)、実質的にイミュータブルクラスのように働きます。