会社でKotlin勉強会をはじめた

今年はJavaな年にするぞ……ということで2月のチャレンジは「会社で週1回、2月は計4回Kotlin勉強会をやる」です。

 

kdnakt.hatenablog.com

 

 

[きっかけ]

先のブログ記事にも書いた通り、2020年はJavaやるぞというのは2019年末くらいからずっと思っていた。

 

そんなとき、会社のSlackで「社内勉強会のない会社なんて……」ということを言っている同僚がいた。それもそうだな、なんとなくJavaっぽいことできればいいかな、と思って自分の分報チャンネルで呟きはじめたところ、好意的な反応をいくつかもらうことができた。

f:id:kidani_a:20200206020758j:plain

f:id:kidani_a:20200206020828j:plain

f:id:kidani_a:20200206020850j:plain

Kotlin、Rust、AWSPythonの反応があった。

 

ので、それについてコメント。Pythonは要望ではないとのことが判明(笑)。

f:id:kidani_a:20200206020619j:plain

f:id:kidani_a:20200206020642j:plain

 

Kotlinをキャッチアップしたいとの声が多数。やや驚いたのは、お仕事で多少書いているとの声。Javaが多い会社なのに、先進的……!

ともあれ、みんなやっぱり何かしら勉強したいんだな、さすが。ということで早速会社のカレンダーに全員編集許可した勉強会イベントの予定を登録したところ、初回は2人が参加してくれることになった。

 

なんとなくググって見つけたKotlinのハンズオンをとりあえず教材としてみることに。

 

[第1回の様子]

というわけで、2020/02/05に第1回を開催した。

 

ところが、勉強会の直前で、予定していたハンズオン教材が思いのほか難しそうであることが参加者との雑談で発覚。よくよく確認すると、確かにKotlin/Nativeとかマルチプラットフォームとか、ど素人が手を出すにはちょっと早そうなタイトルが並んでいる。

これはキャッチアップには向いていないと判断し、急遽教材を変更することに。

 

同じページのリンクを辿ったところ、Learn Kotlin by Exampleというページを見つけた*1

勉強会の冒頭で、ハンズオンをやめてこちらby Exampleの方が良さそうだがどうか、と提案したところすんなり受け入れてもらえた。最初のページに

No prior knowledge of any programming language is required.

(私訳:プログラミング言語の知識は必要ありません)

と書かれており、安心して取り組めそうだったことも決定の一因である。

 

そこからは、参加者同志でGoogle Meetで画面を共有して、表示されているサンプルコードに好き勝手にコードを書き足したりワイワイ言ったりしながら、あっというまの30分間だった。

 

[学んだことや疑問点]

  • 細かい文法など基礎的な内容はリファレンスサイトがあったので、困ったらここを辞書/参考書がわりに見ると良さそう
    Reference - Kotlin Programming Language
  • Hello, World!を動かした
    • println()だけで組み込み関数になってるっぽい
    • JavaっぽくSystem.out.println()に書き換えても問題なく動作した
  • Kotlin本体のバージョンは1.3.Xが最新で、1.4.0が開発中
    • 1.2以前はfun main()ではなくfun main(args: Array<String>)で始める必要があったみたい
    • 型の定義はJavaと違って後ろに書くようだ
  • returnを書かずにfun multiply(x: Int, y: Int) = x * y で関数が定義できる、なるほど
  • fun divide(x: Int, y: Int) = x / y を定義してゼロ除算してみたらjava.lang.ArithmeticException: / by zero
    • JVMで動くからエラーはJavaとおんなじなんだな、見慣れた感じでちょっと親近感わく
  • voidの代わりにUnitという型を使う
  • Infix Functionsというのがある
    • 日本語にすると中置関数、でいいんだろうか(自信がない)
    • infix fun Int.times(str: String) = str.repeat(this)と宣言してprintln(2 times "Bye ")とするとBye Bye と出力されるのは理解できる
    • どう使うと便利なのかはちょっとまだしっくり来てない
  • mutableListOf<>()という組み込み関数があるようだ
    • new ArrayList<>()から解放されるようだが、あまりタイプ数は減っていないような……
    • immutable版もあるのかな
    • classは宣言できるっぽいけど、コンストラクタはどうやって宣言するんだろう?mutableListOfはコンストラクタじゃなくてclassのフィールド変数の初期化で使われているだけなのかな

 

[まとめ]

最初10分くらい教材選定の話で潰してしまって申し訳なかった。準備が足りなかったとやや反省はしているが、それくらいの見切り発車でやってゆるゆる継続していって、いつか業務のアウトプットにつなげたい。

20分ちょっとの短い時間だったけれど、3人で話しながら進めて、色々と理解を深めることができた。オンラインだとちょっとやりづらいということになったので、早速次回はMTGスペースを予約して、大きいディスプレイでモブラーニングすることに。

 

来週はOperator Functionsを理解するぞ! 

*1:なんとなく1年ほど前に触っていたRust by Exampleを思い出させるネーミングだ。