2020/9/11 Kotlin 初めの一歩

https://kotlinlang.org/docs/reference/basic-syntax.html

上記ページを読み、Dartと明らかに違う点についてKotlinの文法をまとめる。

間違った記述がある可能性があります。ご指摘いただけるとありがたいです笑


In Kotlin, if can also be used as an expression:

if文は式としても使える、と。

ということで、if-expressions.

If Expression

Kotlinでは、ifは式(expression)です。つまりifは値を返します。それゆえに、三項演算子(condition ? then : else)はありません。なぜなら、ifを使えばよいからです。


fun main(){
    val a=12
    val b=10
    var max = a 
    
    if (a < b) {  //←普通にif文として使っている。
        max = b
    }
    print(max);

}
//12

↑上記のように普通にif文として使うこともできる。


fun main(){
    val a=20
    val b=4
	var max: Int
	if (a > b) {
    	max = a
	} else {
    	max = b
	}
    print(max);
}

//20

↑普通にif-else文として使っている。


fun main(){
    val x=2
    val y=6
    var max=if(x>y) x else y  //値を返している。
    print(max)
    print("\n")  //←改行は\n
    
    
    val a=4
    val b=400
//↓この書き方でもOK
    max = if (a > b){ 
        a
    }else{ 
        b
    }
    print(max);
}

//6
//400

fun main(){
    val a=20
    val b=30
    val max = if (a > b) {    //こういうふうにブロックにすることもできますよと。
    	print("Choose a\n")
    	a         //ブロックの最後がそのブロックの値となる。returnは無くてもよい。
	} else {
    	print("Choose b\n")
    	b
	}
    print(max)
}

/*
Choose b
30
*/

ifを式として使う場合(つまり値を返したり、その値を変数に代入したりする場合)、else節が必要ですよと。必ず何らかの値を返すように、ということ。

control flowのページは別にやるとして、とりあえず戻る。


Nullable values and null checks

↑これはDartでもnull安全の話は出てきている。もしかしたら結局同じような話なのかもしれないが、とりあえずまとめる。

工事中🏗

 


Type checks and automatic casts

あまり違和感は無い。↓


fun main(){
fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // この時点で自動的にobjをString型にキャストするようです。
        return obj.length
    }

    // if文のブロック外ではobjはAny型、ということです。
    return null
}

	println("${getStringLength("aaaaa")}\n");
    println("${getStringLength(34)}");

}
/*
5

null
*/

ちなみにDartで同じことやったら同じ結果になったので、同様に自動的にキャストしている模様。あまり考えたこともなかった。

//Dartのコードです。
void main(){
  int getSL(dynamic obj){
    if(obj is String){
      return obj.length;
    }
    return null;
  }
  
  int x=getSL("abcdefg");
  print("$x");
  
  var y=getSL(45);
  print("$y");
}
/*
7
null
*/


for loop

Dartとほぼ同じ。特に無い。

fun main(){
val items = listOf("apple", "banana", "kiwifruit")
for (index in items.indices) {
    println("item at $index is ${items[index]}")
}
}
/*
item at 0 is apple
item at 1 is banana
item at 2 is kiwifruit
*/

 


 

while loop

特に無し。


when expression

Dart(など)のswitch-case文にあたるもの、らしい。Dartと明確に違う。個別のページでまとめる。


Range

range。Dartでもあったような気がするが、うろ覚え。うろ覚えって結局それほど使わない、ということのような気もするが、一応見ておく必要はある。

後でまとめる。


Collections

for-in文でイテレート。Dartと同じ。

fun main() {
    val items = setOf("apple", "banana", "kiwifruit")
    when {
        "orange" in items -> println("juicy")
        "apple" in items -> println("apple is fine too")
    }
}
//apple is fine too

“orange” in items

これでitemsの中に”orange”があるか調べられる模様。

Dartには書き方無いっぽい。

Dartwやるなら以下のように

void main(){

  List items=["apple", "banana", "kiwifruit"];
  
  if(items.contains("appl")){
    print("applがあります。");
  }else{
    print("applがありません。");
  }
}
//applがありません。

containsメソッドを使えばできる。Kotlinにもあるんじゃなかろうか、知らないが。

とりあえず後でCollections overview.を見てみる。


Creating basic classes and their instances

クラス。該当ページを見る。

文法知識がほぼゼロなのでざっと目を通して行くしかない。

 

 

参考

https://kotlinlang.org/docs/reference/basic-syntax.html

コメントを残す

メールアドレスが公開されることはありません。