この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
Androidのアプリをメインで開発していますが、最近iOSも勉強し始めました。
Kotlinでいろいろ遊んでいて、Swiftも似ているっという話も聞くので、iOSも比較早く習得できるかもしれないと思ったからです。
何番煎じかわかりませんか、KoltinとSwiftを比較してみようと思います。
詳細な比較は、いろんな記事があります。
しかし、0から学ぶ場合、詳細よりも最初は全体を眺めたい!
全体を理解すれば、他の方々の記事も理解しやすいと思います!
どこから手を付けるのか。。。
日本語も名詞だけつなげれば、なんとなく意味がとれる!
クラス機能がわかれば、なんとなくソースコードは追えるはずっということで、
まずクラスの機能 (プロパティ、メソッド、イニシャライザ、デフォルト アクセス修飾子) を眺めます。
Android開発者であればKotlinはできる!
はいいすぎなので、補足で等価のJavaコードを書きます。
Kotlin
/*
* デフォルトはpublic final 継承を許す時は、openをつける
* コンストラクタの引数を定義することができる。
* これでだけthis.x = x,this.y = yをしている。
*/
class Hoge(val x: String, private val y: String = "default") {
//型推論があるため、Stringを省略できる
//文末;はいらない
var string = "string"
//valの場合は、finalで、上書きはできない
val finalString = "final string"
//nullになる場合は、?をつける
var undefined: String? = null
//もちろんprivateなども設定できる
private val privateString = "private string"
//Javaのstaticと同じだが、定義が少し特殊companion objectを使う
companion object {
val staticFinalString = "static final string"
fun f(string: String) {
print(string)
}
private fun g(string: String, string2: String) {
print(string)
print(string2)
}
}
//コンストラクタ。 xとyはクラスを定義するときに宣言している
init {
print(x)
print(y)
}
//メソッド:デフォルトはpublic
fun hoge(string: String) {
print(string)
}
//もちろんprivateなどをつけることができる
private fun foo(string: String, string2: String) {
print(string)
print(string2)
}
//式一個の場合は、{} と returnを省略可能
fun sum(x: Int, y: Int) = x + y
}
//使用例
//インスタンス化。newはいらない
val hoge = Hoge("x")
//メソッドの実行
print(hoge.sum(1 ,2))
//staticメソッドの実行
Hoge.f("static method")
Swift
/*
* コメントの書き方も同じ
* デフォルトは継承可能
* intanalがデフォルト
*/
public final class Hoge {
// 文末;はいらない
// Kotlinのvarと同じ
var string = "string"
// Kotlinのvalと同じ Javaのfinal
let finalString = "final string"
// Kotlinと同じくnullの可能性があるときは「?」をつける
var undefined: String?
// staticの付け方はJavaっぽいです
let staticFinalString = "static final string"
//funからfuncに、retrunの型の指定が : から -> になってますね
static func f(string: String) -> Void {
print(string)
}
//デフォルトはpublic
private static func g(string: String, string2: String) {
print(string)
print(string2)
}
let x: String
private var y: String
//イニシャライザはJavaでいうところのコンストラクタと同じ役割です。
//デフォルトもつけれます。
init(x: String, y: String = "default") {
self.x = x
self.y = y
print(x)
print(y)
}
//Kotlinと同様Voidも省略可能
func hoge(string: String) {
print(string)
}
private func foo(string: String, string2: String) {
print(string)
print(string2)
}
//一行であっても、{}と型を省略できない
func sum(x: Int, y: Int) -> Int {
return x + y
}
}
//使用例
//インスタンス化:newはいらない
//yはデフォルトを設定してるため省略可能
let hoge = Hoge(x: "x", y: "y")
//メソッドの呼び出し、xとyはデフォルトでは省略できない
print(hoge.sum(x: 1, y: 2))
//staticメソッドの呼び出し
print(Hoge.f(string: "static method"))
Javaでの等価コード
public class Hoge {
public static String staticString = "static string";
public static final String staticFinalString = "static final string";
public String string = "string";
public final String finalString = "final string";
public String undefined = null;
public final String x;
private String y;
public static void f(String string) {
System.out.print(string);
}
private static void g(String string1, String string2) {
System.out.print(string1);
System.out.print(string2);
}
public Hoge(String x, String y) {
this.x = x;
this.y = y;
System.out.print(x);
System.out.print(y);
}
public Hoge(String x) {
this(x, "default");
}
public void hoge(String string) {
System.out.print(string);
}
public void foo(String string1, String string2) {
System.out.print(string1);
System.out.print(string2);
}
public int sum(int x, int y) {
return x + y;
}
}
final Hoge hoge = new Hoge("x", "y");
System.out.print(hoge.sum(1, 2));
System.out.print(Hoge.f("static method"));
まとめ
KotlinとSwiftはなんとなく似てますが、文法の差は少しある。しかし、Android StudioやXcodeでエラーやヒントがあるので、なんとかなりそう。
AndroidエンジニアがiOS勉強する場合、Java -> Kotlin -> Swift の順に学ぶと学習コストが低そう。
Kotlinを学ぶ環境がすごい揃っているので、比較的簡単に学べると思います。
- Try Kotlinですぐに試せる環境と、練習問題(テストコード付)が公式で用意されている
- Android Studioの強力なサポート
ぜひAndroidではKotlinを、iOSではSwiftで快適な開発ライフを楽しみましょう。