About
本サイトについて
趣味で開発したプログラムや開発メモを載せています。
ソースコードはGithubで公開しつつ、なるべく後から分かるように解説に努めてますので、
誰かのお役に立てれば嬉しいです。
プロフィール
kght6123
佐賀県出身で1985年生まれ。
三重県四日市市在住のシステムエンジニア。家庭を大事にしたい2児の父。
趣味で開発したプログラムや開発メモを載せています。
ソースコードはGithubで公開しつつ、なるべく後から分かるように解説に努めてますので、
誰かのお役に立てれば嬉しいです。
佐賀県出身で1985年生まれ。
三重県四日市市在住のシステムエンジニア。家庭を大事にしたい2児の父。
KotlinでAndroidアプリ作ったり、Ktor触ったりしてたので思いだしたい!
昔(2年ぐらい前に)、よく使っていたKotlinとJavaの記法をすっかり忘れているので
どちらも効率よく思いだすために、よく使っていたJavaとKotlinの記法をいろいろ比べてみました!
(ついでに、昔、触っていたKotlinやKtorの現状、今はやっているっぽいフレームワークをまとめてみました!)
JavaとKotlinが少しわからないと読めないかも。よろしければ、参考まで・・・
Kotlinは、変数の宣言時にvar
と書くと変数、val
と書くと定数になり記述量が少ないです。
Javaのように、毎回毎回、定数にするときにfinal
と書かなくてよいです。
Kotlinは、変数の宣言時にnullが入る可能性があるか?を予め決めておくことで
その変数の参照時にはnullチェックを強制(nullチェックがないとコンパイルエラーになる)して、
極力、NullPointerExceptionを起こさないようにコーディングすることができます。
val value: String? // nullの代入が可能
val value: String = "hello" // nullの代入が不可能(宣言時に、何らかの値を代入する必要がある)
さらに、nullチェックと関数の呼び出しを簡単に記述することができます。
value?.let(this::add) // valueがnullならば、letを呼び出さない
一応、Javaでもjava.util.Optional
を使うことで、null安全に参照できますが
Kotlinのような手軽さはありません。
public Optional<String> getValue() {
//
// nullの可能性をOptionalでラップする
//
// -> 空:「Optional.empty()」
// -> nullの可能性有:「Optional.ofNullable()」
// -> nullの可能性無:「Optional.of()」
//
return Optional.ofNullable(value);
}
// null以外のとき、addメソッドが呼ばれる
getValue().ifPresent(this::add);
Javaと違って、ファイル名とクラス名を合わせる必要はないです
関数のように引数のデフォルト値が設定できる
class Hello(val value: String?, val text: String?) {
親クラス(例だと、World
)への引数は下記のように書く
class Hello(val value: String?, val text: String?) : World(text) {
もし、複数のコンストラクタが必要な場合は、下記のように書く
class Hello {
constructor(val value: String?, val text: String?) {
// 一つ目
}
constructor(val hello: Hello) {
// 二つ目
}
}
public class Hello {
private final String value;
private final String text;
public Hello(final String value, final String text) {
super();
this.value = value;
this.text = text;
}
public Hello(final Hello hello) {
super();
this.value = hello.value;
this.text = hello.text;
}
Javaはクラスの中に、内部クラスが書ける。内部クラスはstaticにすることもできる。
public class Main {
public static class Hello {
Kotlinは、後からクラス変数の初期化をしてもnot nullで行うことができます。
Kotlinはnot null変数(?なし)の宣言時に、何らかの値を代入する必要がありますが、
lateinitを使うと代入を遅らせつつ、not nullな初期化済みの変数としてアクセスできます。
(初期化がされていないと、コンパイルエラーになります!)
class Hello {
lateinit var afterInitValue : String
fun init(): Hello {
afterInitValue = "Init!!!"
return this
}
}
作成中・・・