Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JavaDo #19

JavaDo #19

〈7/17〉Java 17 までの新文法をオンラインモブプログラミングで体験会
https://javado.connpass.com/event/217537/

8c6c1f0c4c41d0640ade76bd71e9e475?s=128

Hiroto YAMAKAWA

July 17, 2021
Tweet

Transcript

  1. #javado !"#"$%&$'()*+,-. /0120345671807(9:; @gishi_yama (山川広人: 公立千歳科学技術大学) 1

  2. #javado あなたが普段お使いのJavaのバージョンを教えてください。 ※普段使ってないひとは、最後にコーディングした時のJavaのバージョンで 🙇 <=>?@ABCDE0BFGHIJKLMN'OP 2

  3. #javado 3

  4. #javado 3Q0RSTU$KM$3Q0RVW$KM$ XYXYZ[F[Y)R)M\🤔$ ]^_`RFaK\. bcC>d25efghijRkPSIJaK\ 4

  5. #javado 近年のソフトウェア開発の中で広く・強く支持を得ている(当然の様に使う) パラダイムや開発手法、アーキテクチャ、記法、etc...に対応できるよう、 言語やエコシステムの仕組みが備わっていること (もしくは、備えられるように進化できていること) としたい。 やりたいことに仕組みが備わっていれば、自然と開発者の負担が減る  ⇒ 簡単に実現できるように見えてくる かといって、言語の元々のもつ特性や守備範囲をひっくり返すものではない

     ⇒ 例えば、Javaは17になってもきっと「冗長な書き方」に感じられる言語    だってその根幹は「クラスを中心とする」などの基礎仕様などが根っこだから lmCnIJ$3Q0$Ko\ 5
  6. #javado 〜 Java 9 : Milling Project Coin (2017)  Java

    7(Project Coin: try-with-resouces や型引数の省略など)の微修正  ・インターフェースのPrivateメソッド  ・try-with-resources の実質finalな変数利用  ・_ だけの使用禁止 など Java 9 〜 Project Amber (半年ごと)  Javaの生産性を重視した小規模な言語使用のインキュベート  一部 Preview で導入し、その後追加の改善や正式が行われる  ・var ・Instance of のパターンマッチ ・switch式 ・Textブロック ・Records など その他:標準ライブラリの改善など(半年ごと)  ・List などの .of , copyOf、Stringのformatted 、Streamのnot, drop/takeWhile, toList、   HTTPClientなど !pq$rrsttuvwsx)yz{|+,)}~Y•€CR•‚TG 6 Javaは後⽅互換性を⼤切にしつつも、 新たな⾔語や技術が作り出す「最近の当然」を取り込む速度をあげられるようになってきた
  7. #javado FkƒM„…†‚|‡‚‡'†ˆ[‰. . Š‹o!"#"&f!"#"Œ)yzY. ƒ'•(Ž•†'O 7

  8. #javado Java7 からできるようになった try-with-resources Java9 からは、宣言済みの変数の インスタンスをcloseできるようになった ただし、変数は final として扱われる

    •‘’“”••–“‘—˜™š‘›—˜$œ$•<ž•Ÿ" Rye 8
  9. #javado ファイルパスがあれば、1行で読み書きできる (※通常の例外処理は必要、close処理は不要) ¡¢tB£¤2x-¥‡ST 9

  10. #javado インターフェースを実装するクラスが、 共通して・初期状態として持つメソッドと その処理内容を記述できるようになった たとえば... getZoneCode() で "JST" を返す TokyoClockクラス

    getZoneCode() で "EST" を返す ParisClockクラス を実装すれば、それぞれのインスタンスの getZoneTime で、タイムロケール 設定済みの日時を得ることができる。 20ds£¦st)$§—ž"š •¨$©‘•#"•—$EªA« 10
  11. #javado ローカル変数を var にすることで、 言語側で型推論をしてくれるようになった。 ただし、メソッドの実行結果などで帰ってくる型がコード上で判別しずらいこともあるので、 敢えて使わないという人も多い。(IDEが可視化サポートしてくれる場合もある) 個人的には、フレームワークのコンポーネントの初期化など、 明らかに格納する型が明らかでかつクラス名が長くなるような場合は重宝している。 6s¬xye-#"‘(-®OJ

    11
  12. #javado HTTP1.1/HTTP2 に対応し、 同期・非同期アクセスに対応した HTTPClientクラスが準備された。 リクエストヘッダや 同期・非同期なども設定しやすい。 URLをWeb-APIのものにし、 レスポンスボディの文字列を Jacksonなどで読み込むことで

    情報も用意にアクセスできる ¯°°±² •—Ÿ• 12
  13. #javado 文字列型の操作の改善や、メソッドの追加例。 String.formatted Formatterを1行で呼び出す String.transform message を s として 処理メソッドを与える

    (ラムダ式を利用) ³•‘•Ÿ´>)µ¶P·¸¹-„… 13
  14. #javado 本来は関数型言語などにおける「関数を式の値、引数、データ構造として扱う記法」。 Javaの場合は後述するStream APIなどのために、 「引数と、その引数を使った処理」を特定のメソッドに渡すことができる記法となっている。 さらに、ラムダ式は メソッド参照 という記法に置き換えることもできる。 º»P1¼Q½ 14

    引用: 櫻庭祐一, "今こそStream API 入門", https://www.slideshare.net/skrb/stream-api-125945709
  15. #javado イミュータブルなListなどを作りやすくなった (ミュータブルにしたい場合は  new ArrayList(alphabetList) などを実行) ミュータブルなものからcopyすることもできる (Set/Mapも同様) ²™ —›••™Ÿ>)µ¶P·¸¹-„…

    15
  16. #javado Optional に渡されたものが null だった場合に値を設定しなおしたり、 例外を制御するメソッドが追加されている ¾©••™Ÿ" >)µ¶P 16

  17. #javado Streamの結果をListで取得したいことが よくあるが、toListでimmutableなリスト として取得できるようになった ³•‘—"¿$À±Á>)µ¶P 17 引用: 櫻庭祐一, "今こそStream API

    入門", https://www.slideshare.net/skrb/stream-api-125945709 º»P³•‘—"¿$À±Á
  18. #javado Instance of で実体クラスを判定した際に、 わざわざダウンキャストせずに取り扱えるように else部や判定式の途中でも使える。 ÁŸ˜•"Ÿ›—$™ž$)Âds0ÃA? 18

  19. #javado ラムダ式や yield 式の形で、 Switchの判定結果を式として設定できる ˜”••›–½ 19

  20. #javado """ ... """ で複数行の文字列を定義できる。 SQLとか、メールのテンプレートとか いちいち文字列結合せずに、 可視性高く定義できる °—œ•Ä ™›Å˜

    20 <html> <body> <div>Hello, Higuma Duke!</div> </body> </html>
  21. #javado データの入れ物としての専用クラス (ValueObject的に利用できる) 例えばJSONのデリアライズ先や DTO、一時的に組にしたいフィールド など、通常のクラスと区別したい (単なる)データの入れ物を 用意しておくことができる。 メソッドの拡張やSerializeも可能。 一つのクラス内に複数のrecordを

    宣言することも可能。 あくまでクラスとは別扱い (クラスの手っ取り早い書き方ではない) なので、継承に制限がある。 Æ—›™‘§˜ 21 と書くと、下のクラスと相当が生成される
  22. #javado gÇ)•È¹ 22

  23. #javado スーパークラスが、サブクラスになれるクラスを制限する ³—" —§$² "˜˜—˜>ÉsxÊ1tPË$±‘—#•—” 23 🆗 🙅

  24. #javado 一覧しててみやすい参考サイト: @hishidama "ひしだま's ホームページ Java新機能(Javaの変更点)" https://www.ne.jp/asahi/hishidama/home/tech/java/uptodate.html きしだなおきさんのQiita記事: @kis "Java16新機能まとめ"

    など https://qiita.com/nowokay 櫻庭 祐一さんのBlog記事: @skrb "JEPでは語れないJava 16" など http://www.javainthebox.com/ "今こそStream API 入門" もとても参考になる https://www.slideshare.net/skrb/stream-api-125945709 X)ÌMCYGkÍ•ÎJ 24
  25. #javado (|ÏЃM•‚‡GÑZ•RÒ_R)\. 🤔 25

  26. #javado 345671807(Ó2Ó29:†‚»ÔÕ[ 26

  27. #javado 345671807>34Ósʨ$3Ö07P$Ko 27 マーク・パール (著)、長尾高弘(訳)、 及部敬雄(解説): モブプログラミング・ベストプラクティス モブプログラミング:   複数人の質疑や議論の結果で進み、  フロー効率の向上やチームの成長に

     寄与する ◦ 難しい課題に複数人の知識、    スキル、ノウハウを総動員し取り組める ◦ 相互に知識・スキルを共有・継承できる ◦ 開発と改善(レビュー・リファクタリング)    を兼ねられる ひとつのプログラミング課題に、複数人のチームメンバーが、 同じ場所で、ひとつのパソコンを使って、解決方法を議論しな がら 開発を進める手法 参考文献:
  28. #javado 1. 3名以上で一カ所に集まる 2. タイピスト(1名)とモブ(そのほか)に分かれる。タイピストは、パソコンの前に座る。 3. 活動する時間と、時間内に到達を目指すゴール、タイピストの交代のタイミング(5〜15分ごと)を決める 〈モブ〉 ・ ディスプレイに表示される画面を全員で見ながら、

      解決すべき課題や問題点に集中し、問題解決のための方法を考え・推測・提案する ・ わからないことはわかるまで質問して、学ぶ 〈タイピスト〉 ・モブ全員の合意がとれた操作やコードの入力をする 4. タイミングがきたら、タイピストを交代する。 5. ゴールが達成できたら、みんなで喜ぶ(ハイタッチ!) 6. モブ終了の時間がきたら、次回のモブにむけてふりかえりを行う 345671807)×Ø 28 モブ タイピスト モブ モブ モブ モブ
  29. #javado lÙ)345671807)9Ú 29 Zoomミーティング AWS Workspaces 遠隔タイピストPC Workspaceクライアントで 接続・タイピスト操作 タイピスト役

    音声・カメラ Workspacesの 画面共有 音声・カメラ共有 モブ役たち IntelliJ IDEA, Zoom を起動 ブラウザも利用可 10分程度で交代 モブ役→タイピスト役は  Workspacesクライアントを起動 タイピスト役→モブ役は Workspacesクライアントを終了 (変更タイミングはお知らせします) Zoomを起動 遠隔タイピストPCの画面を Zoom画面共有で確認しながら モブ役達でディスカッションし、 タイピストへ操作依頼
  30. #javado • 内職はやめましょう! 通知がきたのでつい...は休み時間までグッと堪える。  ⇒どうしても緊急のときは、一旦モブの活動から抜けて、終了させてから戻ってくる。 進行に必要な調べものも、タイピストに指示をしてみんなで同じ画面で調べる。  ⇒調べる時は一時的にタイマーをポーズしても良い。 • できるだけビデオもONにしましょう! メンバーがどんな表情で参加しているかも、チームに重要な情報です。

    差し支えのない範囲で、カメラをONにして参加しましょう。 • タイピストへ指示するときは、Zoomのコメント機能をうまく使おう! オプションを表示>コメントをつける で、画面共有に色々描ける  ⇒レーザーポインタのつもりで「絵を描く」「スターをつける」で指し示す  ⇒削除で消す • 細かくゴールを設定して、達成したら万歳しよう! 「何分ぐらいで◦◦をしよう」と目標を決めてから作業をする 目標が達成できたら、全員で万歳をして喜ぶ(少し大げさに) 345671807)ÛÜÝ>ÞP 30
  31. #javado • 参加者の人へ どんなに小さいことでも「わからない」「不安」「こういうことかな?と確認したい」が 1つも残らないようにどんどん質問・確認しましょう。 もちろん、プログラムのこと以外でも構いません。 あなたが質問すれことで、同じ事を思っている・実は勘違いしている他の人も助かります。 • 経験者の方へ 参加者(初心者)の方が発言しやすい雰囲気造りや、確認の促しをしてあげてください。

    どんな細かいことでも共有された知識・スキルがチームの財産や蓄積になります。 あながた教えることで、チームがどんどん円滑に、ゴールに進めるようになります。 • Java Do スタッフへ 原則経験者と同じ振る舞いですが、タイピストの暴走(モブの合議や指示のない操作)や モブの暴走(一人の意見で質疑や合議無しに進んでしまう)を防いでください。 ゴールに到達したら率先して喜んでください。チームの良い雰囲気が作れます。 345671807)ÛÜÝ>ßP 31
  32. #javado グループで何か素振りができる簡単なアプリを作成して、そのなかで積極的に新しい文法を試して みましょう。 (どうしてもCUIとかになりがちですが)どんなものを作るか、どの文法を試してみたいかも、モ ブのグループの皆さんにお任せします。 例えば... ・簡単なゲームを作ってみる(じゃんけん・ポーカー・トランプなど) ・コロナ感染症のオープンデータをひっぱってきてファイルに書き込む(バッチ処理的な) ・簡単なWebアプリを作ってみる(Spring MVCなど)

    ・TechFulなどの演習問題の回答をJava17に作り替えてみる Processingを使える人が運良くいる場合は、それを使うのものありかもです... (一応、モブ用マシンに組み込んだプロジェクトがおいてあります) メンバー間のレベル差もあるので、エンジニア経験が豊富な方はぜひリードをお願いします。 345671807)¡sà 32
  33. #javado File > ProjectStructure の Project や Modules で、 Language

    Level を 16 (Preview) - Sealed Types にしてください。 •àáP*†k56v¦ÊB-âJã 33