一番かんたんなJava入門

これからJavaを始めようという人の為の超入門サイトです。丁寧、簡単にこだわった解説なので初心者にぴったりです

Home » Androidアプリの作り方 » Androidの正式開発言語となったKotlinとJavaの基本文法の違い

Androidの正式開発言語となったKotlinとJavaの基本文法の違い

time 2017/05/19

【Kotlin編】ゼロからはじめる一番やさしいAndroidアプリ開発入門

sponsored link

KotlinがAndroidの正式開発言語に

 [速報]「Kotlin」がAndroidの正式な開発言語に。ということで、超巨大プラットフォームAndroidの開発言語という絶対的地位からJavaがいよいよ本当に降ろされることになりそうです。

 Oracleは何やってんでしょうか?今のGoogleに見放されたら終わりですよ。せっかく花形ポジションに座らせてもらったというのに。

 まあ、時代は変わるもんですね。とりあえず新たに花形ポジションに着くことになったKotlinについてまとめてみました。

Kotlinの基本情報

 Kotlinは普通に「コトリン」と読むようです。なんかかわいい。

 Kotlinを開発したのは、あの統合開発環境InteliJ IDEAの開発元であるJetBrains社です。今はオープンソース化されてます。
GitHub – JetBrains/kotlin: The Kotlin Programming Language

 Javaと同じコンパイル言語。Javaと同等のコンパイル速度らしい。

 KotlinはJVM上で動作し、Javaとの互換性を保ちつつも、Javaではできないモダンな書き方ができるようになってるのが大きな特徴です。

KotlinとJavaの違い

 Kotlinの文法について、Javaとの違いに着目しながら説明したいと思います。

mainメソッドはクラスの外

 Javaではmainメソッドはpublicなクラスのstaticメンバとして書く必要がありましたが、Kotlinでは、いきなりmainメソッドを書くことができます。この方が自然でいいですね。

Kotlin

fun main(args: Array){
    println("Hello Kotlin")
}

Java

public class Main{
    public static void main(String[] args){
        System.out.println("Hello Java");
    }
}

セミコロンレス

 Javaでは文末のセミコロンが抜けるといちいち怒られますが、Kotlinでは改行するだけで文末と見なされます。

 一行に複数の文を書きたい場合はセミコロンが要ります。

基本データ型(プリミティブ型)は無し

 Javaではintfloatcharなどの基本データ型が用意されていますが、Kotlinではありません。

 その代わり、同じように扱えるクラス(オブジェクト)が用意されています。

説明
Double 64ビット浮動小数点数
Float 32ビット浮動小数点数
Long 64ビット符号付き整数
Int 32ビット符号付き整数
Short 16ビット符号付き整数
Byte 8ビット符号付き整数
Char 1文字を表す文字型
Boolean 真偽値(trueまたはfalse)
String 文字列

 それぞれ頭文字は大文字なので注意。

型の宣言不要

 Kotlinは型推論が備わっており、変数の宣言時に初期化(値の代入)を行う場合は型を書く必要はありません。

 その代わり、変数の宣言時にはvarvalを付ける必要があります。varは普通の変数、valは定数となり再代入不可になります(Javaのfinalと同じ)。

Kotlin

var num1 = 0 //変数
val key = "abcd" //定数

key = "efgh" //定数に再代入はコンパイルエラー
var num2 //その場で初期化しない場合は型を明示しないとコンパイルエラー

 型を明示的に指定したい場合には以下のようにコロンに続けて書きます。

var num: Byte = 10

 変数名の後ろに型が来るのは、慣れないうちは読みにくいと思います。

関数(メソッド)の定義の仕方

 関数はクラスのメンバである必要はなく、トップレベルで宣言することが出来ます。

 関数を宣言する際にはfunを頭に付けます。

 仮引数は型を明示する必要があります。

 戻り値がある場合は( )の後ろにコロンを付けて書き足します。戻り値が無い場合は何も書きません。

Kotlin

fun plus(num1: Int, num2: Int): Int{
    return num1 + num2
}
fun main(args: Array<String>){
    println(plus(1, 2))
}

//=> 3

Java

class Main{
    public static voi main(String[] args){
        System.out.println(plus(1, 2));
    }
    static int plus(int num1, int num2){
        return num1 + num2;
    }
}

//=> 3

引数のデフォルト値を設定できる

 Kotlinでは引数のデフォルト値を設定することが出来ます。

Kotlin

fun hello(name: String, language: String = "en"){
    //引数のlanguageによって言語を変えて、挨拶する処理
}
fun main(args: Array) {
    hello("田中", "ja")  //普通に引数を2つ渡して呼ぶ
    hello("Alex")       //第二引数を省略してデフォルト引数を使う
    hello("Michel", language="fr") //引数名を指定して渡すこともできる
    hello(language="es", name="Alonso") //引数名を指定する場合、渡す順番は自由
}

配列はArrayオブジェクト

 Kotlinではいわゆる配列はありません。その代わりにArrayクラスを使います。

 Arrayオブジェクトを作る際には、arrayOfメソッドを使います。

 要素にアクセスする際は普通に[ ]でインデックスを指定することが出来ます。

Kotlin

var array = arrayOf(1, 2, 3)
array[0] = 5
println(array[0])

//=> 5

Java

int[] array = new int[]{1, 2, 3};
array[0] = 5
System.out.println(array[0]);

//=> 5

コレクションは読み込み専用or書き込み可

 KotlinのコレクションはListMapSetの3つのクラスが用意されています。

 それぞれ基本的には読み取り専用になっていて、要素を一度入れたら書き換えることが出来ません(値を変更するメソッドが用意されていない)。

 書き込み(要素の変更)もしたい場合は、それぞれMutableListMutableMapMutableSetクラスを使う必要があります。

newは無し、コンストラクタはinit

 インスタンス化する際のnewは要りません。

 コンストラクタは、init{ }で定義します。コンストラクタに渡したい引数はクラス名の後ろに( )をつけてそこに書きます。

Kotlin

fun main(args: Array) {
    var human = Human("Nobuo")
    println(human.name)
}
class Human(name: String){
    val name: String
    init{
        this.name = name
    }
}

Java

public class Main{
    public static void main(String[] args) {
        Human human = new Human("Nobuo");
	System.out.println(human.name);
    }
}
class Human{
    final String name;
    Human(String name){
        this.name = name;
    }
}

プロパティは自動でセット可能

 コンストラクタに渡した値をそのままプロパティに代入したいようなパターンがよくあると思います。上記の例もまさにそうです。

 そういうのがすごい簡単に書けます。

 コンストラクタが受け取るべき仮引数を定義する際に、varvalを書いて宣言することで、その変数をそのクラスのプロパティ(インスタンスフィールド)として宣言したことになり、しかも、そのプロパティへ代入する処理をコンストラクタに書かなくてもいいんです。

Kotlin

class Human(val name: String){
    //コンストラクタ無し
}
fun main(args: Array) {
    var human = Human("Nobuo")
    println(human.name)
}

//=> Nobuo

文字列の中に変数を入れる

 ダブルクォーテーションで囲った文字列リテラルの中に変数を放り込むことができます。

 変数名の頭に$を付けて放り込むだけです。

Kotlin

num = 3
print("好きな数字は$num")

#=> 好きな数字は3

 

 ただしこの場合、変数名の後ろに文字が続く場合、境目をうまく区切ってくれないことがあります。

Kotlin

var num = 3
print("好きな数字は$numです。")

#=> コンパイルエラー Unresolved reference: numです

 

 ${ }を使えば明示的に変数部分を指定できます。

Kotlin

var num = 3
print("好きな数字は${num}です。")

#=> 好きな数字は3です。

 

 というか、${ }の中は普通に計算とかも出来ます。

Kotlin

var num = 3
print("好きな数字は${3+4}です。")

#=> 好きな数字は7です。

詳しくは

 以上、とりあえずJavaとの大まかな違いをリストアップしてみました。もちろん違いはまだまだ沢山あります。

 詳しくは、30分で覚えるKotlin文法 – QiitaとかはじめてのKotlin。Javaと比較してみたとかで調べてみてください。

 それと、ブラウザ上で実際コードを書いて動かしてみることができる便利なサイトがあるので、いろいろ試してみてください。

 ゼロから丁寧に教えてもらいたい人はUdemyの【Kotlin編】ゼロからはじめる一番やさしいAndroidアプリ開発入門がおすすめ。キャンペーン価格で今のうちに買っておけばいつでも見れます!

今だけ→転職できなければ全額返金の「エンジニア転職保証コース」
絶対エンジニアになる!→テックエキスパート

フリーランスエンジニアの収入例を見てみる→レバテックフリーランス

全くの初心者がWordPressでブログを始める方法

全くの初心者がWordPressでブログを始める方法

sponsored link

Androidアプリを作ろう

down

コメントする



一番かんたんなJava入門

Androidアプリの作り方

忘備録

私の作ったAndroidアプリ

おすすめプログラミングスクール

プログラミングスクール検索

受講スタイル

習得したいスキル

習得したい言語・フレームワーク

オプション

料金

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向という考え方について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。
 オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊![詳細]

管理人

Nobuo_CREATE

Nobuo_CREATE

WordPressテーマPrinciple、マテリアルを作ったり、Androidアプリを作ったり、Java入門サイトを作ったり、本を書いたりしています。大阪の北野田駅近くのマイスタイルという学習塾を経営しています。どうぞよろしく。 [詳細]



sponsored link

オススメ書籍

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向という考え方について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。
 オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊![詳細]

只今、急拡大中

JavaからのRuby on Rails入門

JavaからのRuby on Rails入門