• トップ
  • ブログ一覧
  • 【第2回】KotlinとJavaの変数の扱いを比較してみた
  • 【第2回】KotlinとJavaの変数の扱いを比較してみた

    あっきー(エンジニア)あっきー(エンジニア)
    2019.04.10

    IT技術

    【第2回】JavaからKotlinへ変えていくためのお勉強

    秋山秋山さん

    (株)ライトコードの秋山(あきやま)です!

    Androidアプリ開発していくにあたり「JavaからKotlinへ変えていくためのお勉強」という記事を連載をしています。

    さて、前回は『Kotlinとはどういったものか』や『どんなことを勉強していくのか』をお話ししました。

    そして、今回からは本格的にKotlinに触れていきたいと思います!

    Java経験者の僕が、初歩からKotlinを解説していきますので、一緒に勉強していきましょう!

    第1回はこちら

    Kotlinのお勉強2019.03.22【第1回】Android開発をJavaからKotlinへ変えていくためのお勉強<JavaとKotlin> 秋山さん(株)ライトコードの秋山です!最近、Androidアプリ開発していくにあたって、い...

    Kotlinでの変数の扱いについて

    まずは、プログラミングの基本中の基本である、変数の扱いから始めたいと思います。

    早速いってみましょう!

    Javaの場合

    Javaでは、文字列や数字を扱う時、このように記述しますよね?

    1//宣言
    2String str = "abc";
    3int num = 123;
    4double dNum = 20.5;
    5boolean bl = true;
    6
    7//コンソール表示
    8System.out.println(str);
    9System.out.println(num);
    10System.out.println(dNum);
    11System.out.println(bl);

    [結果]
    abc
    123
    20.5
    true

    Kotlinの場合

    それでは、Kotlinでは、一体どのように書けるでしょうか?

    1//宣言
    2val str: String = "abc"
    3val num: Int = 123
    4val dNum: Double = 20.5
    5val bl: Boolean = true
    6
    7//コンソール表示
    8println(str)
    9println(num)
    10println(dNum)
    11println(bl)

    [結果] (Javaの時と同じ結果になります)
    abc
    123
    20.5
    true

    Kotlinでは、「val 変数名: 型 = 値」といった形で書くことができます。

    この時、行の末尾に「;」は不要になります。

    ちなみに、コンソール表示の記述は、Kotlinでは「println(値)」と書くことが出来ます。

    1行で記述することも可能

    そして、下記のように複数の命令文を「;」で区切れば、1行で記述することも可能です。

    1//宣言 
    2val str: String = "abc"; val num: Int = 123; val dNum: Double = 20.5; val bl: Boolean = true
    秋山秋山さん
    ですが、あまりこういった書き方はしないと思うので、頭の片隅に置いていただければ!

    Kotlinでのvalとvarの違い

    kotlinでは、「val」の代わりに「var」でも表現できるのです。

    では、「val」と「var」の違いを見ていきましょう!

    「val」は中身を変更できない

    1//varでの宣言
    2var str: String = "abc"
    3var num: Int = 123
    4var dNum: Double = 20.5
    5var bl: Boolean = true

    「val」で定義した場合、それ以降中身は変更出来ません

    変数というよりも、下記Javaの、定数のような扱いということができます。

    1final String str = "abc";

    ですので、以下のように「val」で定義した場合は途中で変数の中身を変更することは出来ないと覚えておいてください。

    1val str: String = "abc"
    2str = "def" // ←出来ない

    「var」は中身を変更できる

    逆に、「var」で定義した場合は、以下のようにその後も変数の中身を変更出来ます。

    1var str: String = "abc"
    2str = "def" // ←defに置き換えられる

    ぱっと見、「val」と「var」って似ているので最初は迷うかもしれません。

    似ていますが、全然性質が違いますので、用途に合わせて使い分けていきましょう。

    秋山秋山さん
    3文字目の「l」が一本道に見えるので定数「r」は先端が分岐しているように見えるので変数といったイメージで覚えましょう!(笑)
    ミツオカミツオカ
    ちなみに
    「val」は「value」の略
    「var」は「variable」の略

    型推論

    さて、先ほどの表記ですが、実は、さらに簡単に書くことが出来ます。

    1//宣言
    2val str = "abc"
    3val num = 123
    4val dNum = 20.5
    5val bl = true

    Kotlinは型を指定しなくても良い

    なんと、Kotlinの場合、型を指定しなくても「型推論」という機能によって内部で判断してくれます。

    数値の場合、桁数や小数点の有無によって表現の仕方が変わりますが、以下のようにスッキリ書くことが出来ます。

    1val num1 = 100         // 主にInt型の時はそのまま
    2val num2 = 2000000000L // 末尾にLを付けると、Long型として推論される
    3val dNum1 = 30.8       // 小数点が付いている場合、Double型として推論される
    4val dNum2 = 40.9f      // 末尾にfかFを付けると、Float型として推論される
    秋山秋山さん
    ただ、色々な数値を扱って分かりづらくなるようであれば、下手に省略しないで型を明示的に記述しても良いと思います!

    文字の連結

    次は、文字の連結についてです。

    文章を表示する時に、変数の結果を連結して表示することは、まあよくありますよね。

    では、簡単な例をJavaで表示してみたいとおもいます。

    Javaの場合

    1//宣言
    2int num = 18;
    3
    4//コンソール表示
    5System.out.println("今日の気温は、" + num +"度です。");
    1[結果]
    2今日の気温は、18度です

    これですね。

    では、同じ内容を、Kotlinで記述するとどうなるでしょうか?

    Kotlinの場合

    1//宣言
    2val num = 18
    3//コンソール表示
    4println("今日の気温は、" + num + "度です。")
    1[結果] 
    2今日の気温は、18度です

    基本的には、Javaと同様の書き方が出来ます。

    でも、Kotlinでは、以下のようにも書き換えることができるのです!

    1println("今日の気温は、${num}度です。")

    文字列の「""(ダブルクオーテーション)」の中でも「${変数}」と記述すれば変数の前後を「+」で連結しなくても表記出来るので大変便利です!

    秋山秋山さん
    「+」で連結する場合は、こんな注意点があります!
    ミツオカミツオカ
    1.スペースを空けないといけない
    2.文章によっては混乱しやすくなってしまう
    秋山秋山さん
    そのため、基本的に${変数} を使用するのが良さそうだと感じています!

    nullの扱い

    Kotlinでは、String型の変数に「null」を入れたい場合、どうすればいいのでしょうか?

    では、例をあげて説明していきます。

    Javaの場合

    1String nullStr = null;

    これは、よくJavaで見かける書き方だと思います。

    では、Kotlinではどのように書くでしょうか?

    Kotlinの場合

    1//val nullStr: String = null // ←そのままではエラー
    2val nullStr: String? = null //型の末尾に「?」を付けることによってnull許容

    Javaの感覚を引きづったまま、「null」を入れようとすると、エラーになります。

    この場合の解決方法としては、型の末尾に「?」を付けることによってnullを許容することになります。

    ただ、ここでnullを許容したとしてもこの後に続く処理等で問題が起きるかもしれません…

    第2回へつづく!

    さいごに、ちょっと怖いことを書いて終わりにしました(笑)

    長くなってしまうため、「null」についてはこの辺までとさせていただきます。

    実際の処理で起こりそうな細かいことは、今後の記事で書いていきたいと思います!

    今回は、変数の扱いで主なものをザッとまとめてみました。

    ありがとうございました!

    秋山秋山さん
    足りないものもありますが、都度新しい記事でご紹介していきます!

    オススメ本

    基礎&応用力をしっかり育成!Androidアプリ開発の教科書 Kotlin対応 なんちゃって開発者にならないための実践ハンズオン
    基礎&応用力をしっかり育成!Androidアプリ開発の教科書 Kotlin対応 なんちゃって開発者にならないための実践ハンズオン

     

    第2回はこちら

    featureImg2019.04.10【第2回】KotlinとJavaの変数の扱いを比較してみた【第2回】JavaからKotlinへ変えていくためのお勉強秋山さん(株)ライトコードの秋山(あきやま)です!Andro...

    こちらの記事もオススメ!

    featureImg2020.08.14スマホ技術 特集Android開発Android開発をJavaからKotlinへ変えていくためのお勉強DelegatedPropert...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    第1回はこちら

    Kotlinのお勉強2019.03.22【第1回】Android開発をJavaからKotlinへ変えていくためのお勉強<JavaとKotlin> 秋山さん(株)ライトコードの秋山です!最近、Androidアプリ開発していくにあたって、い...

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    あっきー(エンジニア)

    あっきー(エンジニア)

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background