Subtle difference between Swift and Kotlin

投稿者: | 2019年1月31日

Subtle difference between Swift and Kotlin

There are lots of similarity between Swift and Kotlin, so we decided to use them for new cross-platform project in iOS and Android.

When we start the study of them, we soon noticed the subtle and important difference between them.

  1. Assignment can/cannot be used as condition
    In swift the operation of assignment is an expression thus return true of false. Thus, we can use it as a condition.

In swift we often use this when unwrapping optional objects. The similar mechanism in Kotlin is Nullable. We can use it to achieve optional-like behavior. We are going to write this in another article.

  1. Swift let and Kotlin val
    Swift let means the object is immutable. On the other hands, Kotlin val means the object is read-only. So, you can change the member variables of the instance which was created as val object 1. This difference is annoying.

Reflecting this Kotlin has special mutable collection like MutableSet (Set is read-only.)

We have to consider this difference at the design phase of the project.


  1. Programming Kotlin, Stephen Samuel, Stefan Bocutiu, 2017 Packt Publishing (p.30) ↩︎

コメントを残す

SwiftとKotlinにおける微妙な差異

投稿者: | 2019年1月31日

SwiftとKotlinとで気になる違い

SwiftとKotlinとはよく似ているのでロジックを共通化させるためにiOSとAndroidのプログラミング言語として採用することにした。

もちろん、違いもあるわけで、その中ので気になったものを上げていこうと思った。

代入がexpressionかstatementか

つまりif文の条件などに利用できるかということである。

代入がexpressionであれば条件として利用でき、statementなら利用できない。

これは
Swift: Expression
代入を条件として利用可能:特にOptionalで多用する。

Kotlin: Statement
代入を条件として利用できない。

のようになっているので気をつけなくてはならない。代わりと行ってはなんだがNullable属性を持つものを使ってOptional的な使い方ができる。これについてはまた項を改めて書く。

Swift: var-let, Kotlin: var-valの関係

これは微妙なことだ。

SwiftでもKotlinでもvarなら変数、mutableという意味で変わらない。これは問題ない。

Swiftのletは定数でありimmutableなオブジェクトを指す。

一方でKのvalはimmutableではなくてread onlyのオブジェクトを指す。これはJavaにおけるfinal変数と同じである1

つまりオブジェクト自体の変更はできないがインスタンスのメンバー変数は後で変更ができると言うことである。

これに対応してかKotlinのCollectionにはMutableSetのようにMutableを指定したものがある。

設計時には注意しておく必要がある。


  1. Programming Kotlin, Stephen Samuel, Stefan Bocutiu, 2017 Packt Publishing (p.30) ↩︎

コメントを残す