作記録

記憶代わり

JavaとKotlinとPHPを書いてみて

型のある引数にnullを渡せるか渡せないかに違いがあるようなのでメモ。

(Kotlinのような静的型付言語を使いたいところですが、悲しいわけあってPHPを書いてます。)

PHPの場合、型のある引数にnullを渡すとエラーになる。

<?php

function print(string $argument) {
    print($argument);
}

print(null);
?>

上記ソースコードは「string型の$argumentにnullは入らないよ」エラーになる。

 

<?php

function print(string $argument) {
    print("こんにちは");
}

print(null);

?>

当然、上記ソースコードも「string型の$argumentにnullは入らないよ」エラーが起きる。 引数を関数内で利用していなくても代入時点でエラーが起きるという事。

Kotlinの場合

fun main(args: Array<String>) {    
    fun print(argument: String) = println(a);
    
    print(null);
}

上記ソースコードの場合、String型がNotNullなのでコンパイルエラーになる。 Kotlinはここが凄く良いと思ふ。

Javaの場合

public class Main {
    public static void main(String[] args) throws Exception {
        Main main = new Main();
        main.print(null);
    }
    
    public void print(String argument) {
        System.out.println(argument);
    }
}

上記ソースコードは null とprintされる。  nullが引数に代入できちゃう。

以上。