C言語とKotlinを比較してKotlin Loverになろう

# はじめに
木更津高専情報工学科1年のなおちきです。(KotlinKotlinうるさい人です。)
Kotlinの知名度が弊学科1年では低すぎる[^1]のでKotlinを広めるべくこんな記事を書いてます。
[^1]:KotlinってAndroidアプリの開発言語で有名だと思ったんだけどなぁ・・・あれか？みんなFlutterに行ったのか？


## 対象読者
Kotlinをやっていない人(特にC言語を学んでいる弊学科1年生,C言語が初めてのプログラミング言語な人)
# そもそもKotlin(ことりん)って？

https://kotlinlang.org/
> 最新で簡潔で安全なプログラミング言語

だそうです。

マイクラのModとかで聞いたことがある人もいるかも知れませんが、Javaという世界中で広～～～～く使われている言語があるんです。それを改良してつよつよ[^2]にしたのが**Kotlin**です！！！
Androidアプリを作るときの標準言語でもあります(iOSアプリも作れるよ！[^3])
ちなみにWebサイトもほとんどKotlinで完結できます。
[^2]:どうつよつよになったかは別記事で～
[^3]:https://kotlinlang.org/lp/mobile/

# 基本構文
少しでも「良さそう」とか思ったらKotlinの環境構築をやりましょう！！！

https://play.kotlinlang.org/

↑ここから手軽にKotlinを試せるので是非一緒に使ってください。

C言語と比較しながら見ていきましょう！
基本的にC言語とKotlinの実行結果は同じになるよう書いてます。

## 普通に文字を出力
### C言語
```c
#include <stdio.h>
int main(){
    printf("Hello, world\n");
}
```
### Kotlin
```kotlin
fun main(){
    println("Hello, world")
}
```
`printf`と`println`似てますね！Kotlinの`println`は改行(`\n`)が勝手に入っています。もちろん改行無しの`print`もありますよ^-^)v
## 変数
### C言語
```c
#include <stdio.h>
int main(){
    int prime = 53;
    printf("素数は %d",prime);
}
```
### Kotlin
```kotlin
fun main(){
    var prime:Int = 53
    println("素数は $prime")
}
```
Kotlinでは`var 名前:XXX`[^2]で変数が使えるようになります。右側に何か書いてあげないとKotlinではエラーになってしまうので、0でもなんでも入れておきましょう。
printlnの中の`$prime`は変数primeの中身を入れるという意味です。直感的ですね！！
[^2]:`var`は`val`でもいいですが再代入不可で混乱を招く恐れがあるのでここでは`var`でやります。
## 入力を受け取る
### C言語
```c
#include <stdio.h>
int main(){
    int a,b;
    printf("足し算するぜ\n");
    scanf("%d %d",&a,&b);
    printf("a+b=%d",a+b);
}
```
### Kotlin
```kotlin
fun main(){
    println("足し算するぜ")
    var (a,b) = readln().split(" ").map { it.toInt() }
    println("a+b=${a+b}")
}
```
Kotlinの方が長くて難しそうですね。~~僕もこの記事を書いててそう思いました。~~ なのでなるべく丁寧にやります。
入力される文字を「33 4」[^4]とします。
画面上はこうですね
```console
足し算するぜ
33 4
```
まず`readln()`が入力を一行まるごと読み取ってくれます。この場合は`"33 4"`ですね。
次に`split(" ")`が文字列をスペースで区切ってくれます。その次にある`map{}`は区切られたそれぞれの物に対してなにか処理をするというものです。この場合は`{it.toInt()}`なので文字列からInt、即ち整数に変換してくれます。
その結果を左辺のa,bにわけて代入します。あとはこれまで通り足し算して結果を出力しています。
```shell:処理の流れ
"33 4" # readln()
↓ # split(" ")
["33","4"]
↓ # map{it.toInt()}
var (a,b) = [33,4] # 数値になった！！
a は 33
b は 4
```
[^4]:深い意味はない
## for文
### C言語
```c
#include<stdio.h>
int main(){
    for(int i=0;i<10;i++){
         printf("%d 回目のHello!!\n");
    }
    for(int i=1;i<=10;i++){
         printf("%d 回目のやぁ！！！\n");
    }
}
```
### Kotlin
```kotlin
fun main(){
    for(i in 0 until 10){
        println("$i 回目のHello!!")
    }
    for(i in 1..10){
        println("$i 回目のやぁ！！！")
    }
}
```
ここは随分C言語と違いますね。Kotlinには範囲(Range)というものがありまして、`n until m`では$n \leqq x < m$を、`n..m`では$n \leqq x \leqq m$を表します。(この場合、$x$は整数)
```math
0 \ \textrm{until} \ 10=\{0,1,2,3,4,5,6,7,8,9\}
\\

1..10=\{1,2,3,4,5,6,7,8,9,10\}
```
`i in ～`は変数`i`を作って、そこに範囲の中身を順番に入れていくという意味です。
 while文は同じなので割愛します。
## switch文
### C言語
```c
#include<stdio.h>
int main(){
    int finger=0;
    printf("めざましジャンケン ジャンケンポン\n(グー:0,チョキ:2,パー:5)\n");
    scanf("%d",&finger);
    printf("俺はパーを出したぞ。");
    switch(finger){
        case 0:{
            printf("YOU LOSE\n");
            break;
        }
        case 2:{
            printf("YOU WIN\n");
            break;
        }
        case 5:{
            printf("DRAW\n");
            break;
        }
    }
    
    printf("シャンクス、ありがとうございました。\n");
}
```
### Kotlin
```kotlin
fun main(){
    println("めざましジャンケン ジャンケンポン\n(グー:0,チョキ:2,パー:5)")
    val finger:Int=readln().toInt()
    println("俺はパーを出したぞ。")
    when(finger){
        0->{
            println("YOU LOSE")
        }
        2->{
            println("YOU WIN")
        }
        5->{
            println("DRAW")
        }
    }
    println("シャンクス、ありがとうございました。")
}
```
Kotlinでは`when`を使います！！！～のとき...をするみたいな意味ですたぶん。ほぼ`switch`です
## 関数を定義する
### C言語
```c
int superFunc(int n){
    return n*10;
}
```
### Kotlin
```kotlin
fun superFunc(n:Int){
    return n*10
}
//このように一行でもOK
fun superFunc(n:Int) = n*10
```
一行の式なら`=`で簡略化できます
## 配列
### C言語
```c
#include<stdio.h>
int main(){
    const char *languages[] = {"C#","Python","Kotlin","BASIC","JavaScript"};
    printf("%s is the best language.",languages[2]);
}
```
### Kotlin
```kotlin
fun main(){
    var languages = listOf("C#","Python","Kotlin","BASIC","JavaScript")
    println("${languages[2]} is the best language.")
}
```
`listOf()`です覚えましょう！！

## おわり
Kotlinやってみたくなりましたか？
早速、環境構築しましょう！！！！

https://qiita.com/naotikiKt/items/8cfe0364eff557d7a460

まあ実は先程挙げたようなものは他の言語でも出来たりします。
もっとKotlinのことについて知りたい・・・？

https://qiita.com/naotikiKt/items/ab6ac8aebf57af23872a