ニコニコ大百科モバイル

7/2(月)よりスマホまたはPCでアクセスした場合、各デバイス向けのサイトへ自動で転送致します


Kotlin


ヨミ: コトリン
掲示板をミル!
2カキコ!

もしかして? → 音無小鳥

Kotlinとは、プログラミング言語の一つである。


概要


KotlinとはJava仮想マシン上で動作するプログラム制作できるプログラミング言語である。いわゆるJVM言語であるが、どちらかというとAndroidアプリ開発に重きが置かれている。バージョン1.1(2017年3月1日リリース)からはJavascriptへのトランスパイル公式サポートするようになった。

開発元はIntelliJ Ideaなどの各種言統合開発環境の開発会社として知られるJetBrains社。

2016年2月17日バージョン1.0がリリースされた。2012年2月14日からオープンソース化されている。


命名の由来


JetBrains社はチェコ共和国に本社を置く企業だが、開発拠点をロシアサンクトペテルブルクにも有している。Kotlinはその拠点で開発されたので、サンクトペテルブルクの近くにあるKotlinにちなんで命名された。

"kotlin"自体はフィンランド語で「やかん」のこと実際を上から見るとやかんのような形[外部]をしている。Google翻訳によるとフィンランド語で「やかん」は"kattila"となっており、また、「Kotlin(ロシア領)」がロシア名で、フィンランド語ではKotlinをレトゥサーリと呼んでいることから考えると、"kotlin"はロシア側の領土になる13世紀より前の古いフィンランド語なのかもしれない。であり、日本語称っぽく聞こえるのはただの偶然である。


特徴



長所


JavaやScalaの反省を活かした言語仕様

デフォルトnullの回避を強制できる言仕様が最大の特徴だが、nullの回避方法などの文法がSwiftとかぶるとか言われたりする。

静的型付けJVM言語である点がScalaとかぶるが、言仕様が複雑になり過ぎないように「実用性を重視してバランスをとった」という点で差別化されており、JavaだけでなくScalaでの反も踏まえた後発言ならではの設計になっている。

他のJVM言語同様、Javaライブラリシーレスに相互利用できる。記号だけのメソッド名がない分、ScalaよりもJavaからの呼び出しがやりやすい。

統合開発環境が使える

Kotlinレベルマイナーでは開発環境テキストエディタコマンドラインのみということもしくないが、JetBrains社が開発している言だけに、同社が開発しているAndroid StudioIntelliJ IDEAサポートされている。


短所


Android開発に引きずられた仕様

Android開発(Java6ベース)を念頭に置いてきた経緯があるため、標準ライブラリではAPIJava6ベースになっているところがある。たとえばPathやjava.timeのようなJava7以降に入ってきたものはkotlin標準ライブラリでは使われていない。Android開発環境Java7に対応したのも遅かった(2014年)し、Java8対応が始まったのはKotlinバージョン1.0のリリースよりも後なので仕方のないことかもしれない。

Java8のライブラリ普通に使用できるのでそれほど問題ないとはいえ、今後もAndroid開発への対応が足を引っることはあるかもしれない。

Javascriptへのトランスパイルネイティブコードへのコンパイルサポートする方針とのことだが、この仕様が足をひっぱったり、さらにはいつの間にかなくなっていたり(Scalaは初期に.Netへのコンパイルサポートしていたが、いつの間にかなくなった)するかもしれない。

他のIDEは事実上選べない

JetBrains社謹製のEclipseプラグインもあるが、2017年現在アルファ版で実用には耐えない。おまけAndroid公式採用が決まった2017年半ばからはほぼ開発が止まっている。まるでGoogleに採用してもらうアピールのために開発をしていたから用済みになったかのようだ。Android StudioIntelliJ IDEAを手がけるJetBrains社が、競合製品であるEclipseを送るわけにはいかないことをを考えると、IDEの垣根を越えて普及できるのか疑問に残るところはある。


用途


Javaが "write onece, run anywhere" で徴されるような、同じコードで全ての環境に対応に対応可という方針をとっているのに対し、Kotlinは"(コードをそのまま使うことは出来ないが)Kotlinの文法さえ知っていれば、どの分野でも対応したコードが作成可"といったレベルしているようだ(Kotlin1.2のリリースあたりからその方針が特に明確になった)。


Android開発


Android開発の標準IDEであるAndroid Studioサポートされている。最もサポートが手厚く、成功しているといえる分野。2017年5月17日Android OSの開発元であるGoogleもKotlinをAndroid公式開発言の一つとして採用すると発表した(Javaの採用を止したわけではない)。

2019年5月7日にはGoogleがKotlinをAndroidの推奨開発言に格上げした。


Kotlin/JVM


traitのようなJavaにない概念があるScalaと異なり、単一継承であるclassと、実装を持たないことがある抽クラスinterfaceという切り分け方はJavaと同じである(ベータ時代にはtraitがあったが、正式版になる前に止された)。

また、メソッド名への記号使用を原則禁止しているためScalaのような記号演算子をJava側でどう対応させるかという問題もほとんど生じない。

こういったことにより、JavaとKotlinはクラスインターフェイスメソッドが一対一に対応しており、両者を混在させて開発することすら可となっている。

また、Android StudioIntelliJ IDEAにはJavaコードをKotlinのコードに変換する機がある(ただし、nullの扱いが悪いとなかなか手直しなしでは動かないらしい)。


Kotlin script


.ktが標準の拡張子だが、.ktsという拡張子にしてスクリプトとして実行することも可である。

Gradle

ソースコードを実行ファイルにする過程をビルドというが、JavaのビルドツールAnt, Mavenについで普及してきたものにGradleがある。

GradleのビルドスクリプトGroovyという別のJVM言語で記述されてきたのだが、2016年8月からGroovy以外にKotlinスクリプトで記述することも可になった。

初期にはIDEなどの支援がなかったため、Kotlinでビルドスクリプト書かれることはほとんどなかったが、2018年11月26日リリースGradle 5.0からはKotlin DSLが実験的扱いから正式にバージョン1.0となり、使用例も増えつつある。


Kotlin/JS


前述のようにJavascriptトランスパイルすることができるので、Webアプリ開発に用いることもバージョン1.1以降は視野に入ってくると思われる。

ただ、この分野ではTypescriptに大きくをあけられており、いらない子になる可性も否定できない


Kotlin/Native


バイトコードでもJavascriptでもなく、Java仮想マシンなしでも動くネイティブコード(通常のバイナリ)を生成するプロジェクトコンパイルにはLLVMを用いている。

JVM用のKotlinのコードJava仮想マシンなしで動かすことは目標としておらず[外部]Javaライブラリも使えない。

ターゲットiOSアプリ開発らしい。これが実現すればJVMが動くデスクトップOSWindows, Mac, Linuxに加え、モバイルOSAndroid, iOS、さらにはJavascriptトランスパイルによるWebブラウザ上での動作と、ほぼ全てのプラットフォームをカバーすることになる。

2017年5月12日バージョン0.2が出た後もバージョンアップを重ねていたが、Kotlin本体のバージョンが1.3になったのに伴い、Kotlin/Nativeのバージョンも1.3に引き上げられた。しかし製品開発に耐えるとされるProduction Readyの表示は2019年10月の段階でもまだなされていないようである。


Webフレームワーク


Spring[外部]: Javaで実績のあるフレームワークだが、Kotlinもサポートするようになった。

Ktor[外部]: Kotlin公式プロジェクトではないが、Kotlin開発元のJetBrains社公式プロジェクトれてしまったWasabiKaraといったフレームワークに代わってサーバーサイドプログラミングしているらしい。


サンプルコード



Hello World


fun main() = println("Hello, World!")

FizzBuzz


KotlinでFizzBuzz


関連動画



■sm31530583[ニコ動]

■sm32073977[ニコ動]


関連商品


右上の本はKotlinの言開発のメンバーが著者(なので「プログラミング言語Kotlin」的な位置づけ)らしい。

■az4865940391
■az4839961743
■az479816044X
■az4877834273
■az4777520293
■azB00CLMAF1Y


外部リンク



関連項目



細かい長所と短所


静的型付けJVM言語ということでJavaScalaとの較になるが、細かい特色を挙げていく。「〜できない」という点は便宜上短所に分類した場合が多いが、見方次第で長所にも短所にもなるのはどの言でもいえることである。


Kotlin独自のもの


長所 短所
デフォルトnull安全。 ただし、Javaから持ち込まれたクラスメソッドについてはnull安全の保なし。
継承に頼らないdelegateを文法でサポート クラスメソッドデフォルトでは継承不可。
クラスの外(トップレベル)で関数定義が可main()トップレベル関数 this省略すると、トップレベル関数なのかメソッドなのか、見ただけではわかりにくい。
関数で、クラスメソッドが追加されたかのように扱うことが可 関数は演算子のオーバーロードには使えない。
また、クラスAPIドキュメントを読んでもクラス外に定義された拡関数情報は見落とすおそれあり。
関数により柔軟なDSL構築と、そのDSLによる構造化された記述が可 DSLのネストが深くなると、省略したthisが意図しないレベルthisしていても気づけない。
関数リテラルの書き方にラムダ式関数の2種類があり、returnの挙動などが同一ではないため、使い分けることを強いられているんだ!
並列処理はスレッドより軽量なコルーチンが使える。 kotlinx.coroutinesライブラリが別途必要。


Scalaと似ているがやや異なるもの



次へ»
最終更新日: 19/10/22 22:41
タグ検索 パソコン版を見る


[0]TOP
ニコニコ動画モバイル
運営元:ドワンゴ