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が引数に代入できちゃう。
以上。