はじめに
javaからkotlinに移行して学習する際にお世話になったサイトをメモしておきます。
個人アプリはjavaからkotlinに変換してるためAndroidに関するサイトも貼っておきます。qiitaユーザの意識が高すぎて負けそうです。
参考サイト一覧
公式リファレンス(日本語)
http://dogwood008.github.io/kotlin-web-site-ja/docs/reference/
リファレンスPDF
https://kotlinlang.org/docs/kotlin-docs.pdf
リファレンス日本語訳
http://qiita.com/dogwood008/items/6e8d3225ea9bb0fe3099
http://qiita.com/dogwood008/items/f4ceabd0b0d801fb3a9f
ガイドライン
まずは公式ページでコーディング規約、ガイドラインを把握しましょう
https://kotlinlang.org/docs/reference/
ベストプラクティス
https://blog.philipphauer.de/idiomatic-kotlin-best-practices/
日本語訳
http://qiita.com/takahirom/items/87d46150088aadccb481
文法関連
http://qiita.com/ssuzaki/items/0ab14379e2d30e807e9a
http://qiita.com/k5n/items/35e76d79ee9de4effb89
http://qiita.com/magie-pooh/items/b1179af28f5e0d50b62a
コンストラクタ
http://woshidan.hatenablog.com/entry/2015/10/30/083000
スコープ(apply/let/run/with)関連
http://tech.pjin.jp/blog/2017/04/10/kotlin_scoping_function/
http://qiita.com/ngsw_taro/items/d29e3080d9fc8a38691e
kotlinとjavaの混在関連
http://qiita.com/boohbah/items/167233c7eafe17f3150b
http://qiita.com/k5n/items/ceb1f921b27d62fc9fcb
コーディング規約関連
https://github.com/SmartTechVentures/kotlin-style-guide/
javaからkotlin変換でつまずきやすいところ
http://qiita.com/kazhida/items/09b9c7c95f7c43fc903a
http://qiita.com/HIkaruSato/items/4a5a7906761b19217370
kotlin勉強サービス
サンプル文や問題などあります。
https://kotlinlang.org/
はじめに
2017年5月18日のGoogle I/OでKotlinがファーストクラスランゲージにすると発表されたのでKotlinについてメモしておきます。
もともとアプリを作る上でも構文的に見てSwiftより劣っていたJavaです。それらの問題をkotlinは改善してくれます。
java8でラムダ式やオプショナルが実装され大分良くなりましたが、kotlin > (java8 ≒ java9)な所感です。
情報源
https://blog.jetbrains.com/jp/2017/05/18/767
セッション内容の動画
公式ページ
https://kotlinlang.org/
AndroidでKotlinを正式サポート
以前からプラグインでkotlin開発ができていましたが、AndroidStudio3.0より正式サポートになりました。
本日より、Android Studio 3.0はKotlinを最初から同梱します。つまりAndroidデベロッパは互換性について心配する必要がなくなります。今後JetBrainsもGoogleもKotlinでのAndroidアプリケーション開発をサポートしていきますのでご安心ください。
Kotlinの他のプラットフォーム(サーバ、デスクトップにおけるKotlin/JVM、Kotlin/JS、Kotlin/Native)におけるサポートについてもJetBrainsにとって引き続きフォーカスしていきますのでご安心ください。JetBrainsのKotlinにおけるビジョンは、この言語を様々なアプリケーションをマルチプラットフォームで、エンドトゥーエンドに繋げる統一ツールにすることです。これはフルスタックWebアプリケーションも、Androidも、iOSクライアとも、組み込み/IoTも含みます。
プログラミング言語は人間の言語と同じです。つまり話す人が多ければ多いほど良くなります。Androidでの公式サポートで、より多くのデベロッパがKotlinを使うことになるでしょう。そしてJetBrainsはKotlinコミュニティが急速に広がっていくと期待しています。Kotlinによる、またはKotlin向けのライブラリやツール開発が加速し、経験が共有され、Kotlinを使う職が増え、学習教材がたくさん公開されていくことでしょう。Kotlinのエコシステムがより盛り上がっていくことを楽しみにしています!
JetBrainsはGoogleとのパートナーシップで、非営利のKotlinの財団の設立を予定しています。言語開発は引き続きJetBrainsが支援していき、40人いるJetBrainsで二番目に大きいKotlinチームはこれまで通り活動して参ります。Andrey Breslavが引き続きリード言語デザイナーを務め、Kotlinはこれまでと同じ原則をもとに開発が続けられます。JetBrainsはKotlinのデザインプロセスを今後もオープンなものにし続けます。皆様のフィードバックこそKotlinを正しい方向に導くのに必要不可欠だからです。
引用:https://blog.jetbrains.com/jp/2017/05/18/767
Kotlin言語とは
Jetbrain社のオープンソースな言語です。
今すぐにjavaからkotlinへ移行するべき理由とは
既存サービスの場合、規模によっては移行するコストもありますが、費用対効果はその分にあります。
個人的には一番は開発速度が大幅に改善されバグが減ることが大きいと思ってます。
kotlin > (java8 ≒ java9)と言語で優っている
Null Safetyや関数プログラム(ラムダなど)がjavaよりも優っています。java8からoptionalがついてますが、本来のoptionalとずれていてswiftのように使うことはできません。kotlinはswiftに近いためoptionalチェイニングも可能なため、nullでも動きます。
javaもjava9がリリースなどで上がって来ているがAndroidが対応バージョンが6移行など考えるとkotlinにするのがいいと思います。
java9も今年夏にリリース予定とのこと。
http://www.journaldev.com/13121/java-9-features-with-examples#java-9-core
kotlin ≒ swift
言語の基本構文や用意されている機能(ラムダ、オプショナルなど)がswiftに近いです。swiftを触ったことがある人であればkotlinもすぐに理解できます。あとはAndroidのフレームワークの理解は必要です。
開発速度とモチベーション
新しい言語はモチベーション上がります。あとは構文も今風の軽量言語仕様に沿っているので覚えがいがあると思います。
Androidでよく見かけるnpe問題から解放され、コード量がjavaよりも断然少ないコードで実装可能なため、バグなども減ってくると思います。
削減した時間はMVP,MVVM,DDD開発などの設計面に回すことができまね。
互換性100%
javaとkotlinの互換性が100%のため、変えることによりできなくなることはありません。
kotlinで書き方などわからない場合はとりあえずそこはjavaのままというスタンスでもいいと思います。2言語の共存ができます。
JavaからKotlinの学習コストについて
java6,7のスキルでは10日、java8の関数型プログラミングを知っているひとであれば2日程構文を流し見してコードを打てばそれなりに習得できるレベルです。
既存サービスのkotlin化について
既存サービスでjavaからkotlinに変更する場合の進め方を考えました。
時間に余裕があるのであればまとめてコンバートすることが一番スムーズですが、既存サービスの場合、ほかタスクもあるため、一気には難しいのかもしれません。
手始めにテストコードから
どこからコンバートするか迷うところですが、まずは完全にコードと切り離された位置にいるテストコードからやるのがお手軽です。
まずはパッケージ単位で
MVPモデルの場合はM→P→V(Vは最悪やらなくていい)の順番で優先度をつけて対応するといいと思います。
あとはutilityやライブラリの切り離されたところから行うと影響範囲が少なくていいと思います。
単にkotlinに変換ではなく、kotlin仕様のコードに変更
単にjavaからkotlinにコンバートしてエラー対応しても、それはほとんどjavaです。
最終的にkotlinの仕様に沿ったコードに変更しましょう。(まずは順序立てて3フェーズで考えました)
第1フェーズ
java→kotlinにコードを変換
(せっかくkotlinなのにjavaと変わらない状態)
第2フェーズ
kotlinの制御に変更(おもにnullチェック、代入、return関連)
第3フェーズ
FP言語に寄せて変更
妥協
無理にすべてをコンバートするのではなく、あまり機能追加など行わない部分はjavaのままでいくのもありだと思います。
コンバートする場合はすべてテストを再度行わなくていけないのと既存コードで問題が起きていないのであればjavaのままで害になることもないからです。
androidでjava開発のサポートは
公式でのアナウンスはしてませんが、今後もgoogleはjavaのサポートは辞めないのではないでしょうか。言語の選択肢が増えたと考えたほうがいいと思います。kotlinもjavaもファーストクラスランゲージでjavaも伸びしろがあります。
ただoracleと著作権で揉めたりしてたはずですが、どうなのでしょうか。
https://developers.srad.jp/story/16/05/27/0415243/
kotlinの将来性
Android以外にもweb開発などjavaを使って開発していたものがkotlinですべて開発可能です。
言語仕様としてkotlinが上回っているため今後はkotlin開発が増えていくのではないでしょうか。
altJSとしてのkotlinは?
kotlinはjvmのほかjavascriptへコンパイルできます。そのため、altJS(typescript,coffeescript,dartなど)としてもなり得る可能性があります。
kotlinで用意しているものからできることとして比較するとjavascript > kotlinにはなるとおもいます。typescript > kotlinでもあります。
基本的なことは全てできるので、altJSとしても十分に発揮できるのではないでしょうか。
typescriptやらのdslを覚える学習コストを考えると、javaエンジニアはkotlinのほうが慣れやすいのではないかなと思います。
coffee-break
Don't write code that useless.
1日5杯はコーヒー、カフェオレ飲みます。狭心症のため安静にします☆松本 雄貴
Kotlinでサービスリリース目指す!
iOSでチャットアプリ作成中。自然言語解析LSIを習得中
Mac / Android・iOS / Rails / Oracle
2017年 Lpic L2取得
2012年 Android技術者資格取得
2010年 OracleMasterGold10g取得
2008年 CCNAQiitaもたまに投稿
https://qiita.com/y-matsumoto東京近郊で常駐開発探してる方はこちらよりご連絡ください
SES企業でパートナー会社を探している企業様はこちらよりご連絡ください
スプリットカメラ iOS / Android
音声認識で聞いた日付から曜日当てアプリ Android
ソーシャルタイマー Android
カテゴリー
- ActiveRecord (2)
- Android (52)
- AndroidStudio (10)
- Ansible (1)
- AWS (1)
- Bash (18)
- Blog (7)
- BootStrap (1)
- CentOS (16)
- Chef (1)
- css (2)
- Eclipse (5)
- error (1)
- Facebook (2)
- Firebase (1)
- FuelPHP (16)
- Git (22)
- GitHub (3)
- Gradle (2)
- GraphAPI (1)
- Grunt (1)
- heroku (2)
- illustrator (1)
- iOS (17)
- Java (4)
- Jenkins (1)
- jQuery (3)
- Kotlin (2)
- Mac (22)
- nginx (1)
- Node.js (3)
- peco (1)
- php (5)
- Python (1)
- Rails (16)
- Ruby (11)
- shell (1)
- SNS (1)
- Swift (2)
- tmux (2)
- Vagrant (6)
- Vim (6)
- windows (2)
- WordPress (3)
- zsh (4)
- フリーランス (1)
- ライブラリ (1)
- 勉強会 (2)
- 宣伝 (1)
- 未分類 (2)
最近の投稿
- [MAC]HighSierraでgitプッシュエラー「Unable to negotiate with xxx.xxx.xxx.xxx port xx: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se fatal: Could not read from remote repository.」
- [iOS]iOS11からFacebook,Twitter連携(シェアなど)廃止の対応方法
- [iOS]速報2017AppleSpecialEventのiOS11、iPhone8など発表内容について
- [iOS][Firebase]The default Firebase app has not yet been configured. Add `[FIRApp configure];
- [iOS]2017年9月リリースのiOS11で開発者が対応するべきこと
- 今人気の現金化サービスCASH(キャッシュ)を使ったレビュー
- [Pandoc][Mac]pandocでmarkdownからwordファイル作成
- [Android]映画サマーウォーズの聞いた日付(誕生日)から曜日当てをアプリ音声認識で簡単に実現
- [Android]起動しているActivityを取得するadb shell コマンド
- [Android][Kotlin]kotlin学習で参考になるサイト一覧
2023年5月 月 火 水 木 金 土 日 « 5月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 アーカイブ
- 2018年5月
- 2017年9月
- 2017年8月
- 2017年7月
- 2017年6月
- 2017年5月
- 2017年2月
- 2017年1月
- 2016年12月
- 2016年7月
- 2016年6月
- 2016年1月
- 2015年12月
- 2015年11月
- 2015年10月
- 2015年9月
- 2015年8月
- 2015年7月
- 2015年6月
- 2015年5月
- 2015年4月
- 2015年3月
- 2015年2月
- 2015年1月
- 2014年12月
- 2014年11月
- 2014年6月
- 2014年5月
- 2014年4月
- 2014年3月
- 2014年2月
- 2014年1月
- 2013年12月
- 2013年11月
- 2013年9月
- 2013年8月
- 2013年7月
- 2013年6月
- 2013年5月
- 2013年4月
- 2013年3月
- 2013年2月
- 2013年1月
- 2012年12月
- 2012年10月
- 2012年5月
- 2010年6月
エントリ