〈7/17〉Java 17 までの新文法をオンラインモブプログラミングで体験会 https://javado.connpass.com/event/217537/
#javado!"#"$%&$'()*+,-./0120345671807(9:;@gishi_yama(山川広人: 公立千歳科学技術大学)1
View Slide
#javadoあなたが普段お使いのJavaのバージョンを教えてください。※普段使ってないひとは、最後にコーディングした時のJavaのバージョンで 🙇<=>[email protected]'OP2
#javado 3
#javado3Q0RSTU$KM$3Q0RVW$KM$XYXYZ[F[Y)R)M\🤔$]^_`RFaK\.bcC>d25efghijRkPSIJaK\4
#javado近年のソフトウェア開発の中で広く・強く支持を得ている(当然の様に使う)パラダイムや開発手法、アーキテクチャ、記法、etc...に対応できるよう、言語やエコシステムの仕組みが備わっていること(もしくは、備えられるように進化できていること)としたい。やりたいことに仕組みが備わっていれば、自然と開発者の負担が減る ⇒ 簡単に実現できるように見えてくるかといって、言語の元々のもつ特性や守備範囲をひっくり返すものではない ⇒ 例えば、Javaは17になってもきっと「冗長な書き方」に感じられる言語 だってその根幹は「クラスを中心とする」などの基礎仕様などが根っこだからlmCnIJ$3Q0$Ko\5
#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•‚TG6Javaは後⽅互換性を⼤切にしつつも、新たな⾔語や技術が作り出す「最近の当然」を取り込む速度をあげられるようになってきた
#javadoFkƒM„…†‚|‡‚‡'†ˆ[‰..Š‹o!"#"&f!"#"Œ)yzY.ƒ'•(Ž•†'O7
#javadoJava7 からできるようになったtry-with-resourcesJava9 からは、宣言済みの変数のインスタンスをcloseできるようになったただし、変数は final として扱われる•‘’“”••–“‘—˜™š‘›—˜$œ$•8
#javadoファイルパスがあれば、1行で読み書きできる(※通常の例外処理は必要、close処理は不要)¡¢tB£¤2x-¥‡ST9
#javadoインターフェースを実装するクラスが、共通して・初期状態として持つメソッドとその処理内容を記述できるようになったたとえば...getZoneCode() で "JST" を返すTokyoClockクラスgetZoneCode() で "EST" を返すParisClockクラスを実装すれば、それぞれのインスタンスのgetZoneTime で、タイムロケール設定済みの日時を得ることができる。20ds£¦st)$§—ž"𠕍$©‘•#"•—$EªA«10
#javadoローカル変数を var にすることで、言語側で型推論をしてくれるようになった。ただし、メソッドの実行結果などで帰ってくる型がコード上で判別しずらいこともあるので、敢えて使わないという人も多い。(IDEが可視化サポートしてくれる場合もある)個人的には、フレームワークのコンポーネントの初期化など、明らかに格納する型が明らかでかつクラス名が長くなるような場合は重宝している。6s¬xye-#"‘(-®OJ11
#javadoHTTP1.1/HTTP2 に対応し、同期・非同期アクセスに対応したHTTPClientクラスが準備された。リクエストヘッダや同期・非同期なども設定しやすい。URLをWeb-APIのものにし、レスポンスボディの文字列をJacksonなどで読み込むことで情報も用意にアクセスできる¯°°±² •—Ÿ•12
#javado文字列型の操作の改善や、メソッドの追加例。String.formattedFormatterを1行で呼び出すString.transformmessage を s として処理メソッドを与える(ラムダ式を利用)³•‘•Ÿ´>)µ¶P·¸¹-„…13
#javado本来は関数型言語などにおける「関数を式の値、引数、データ構造として扱う記法」。Javaの場合は後述するStream APIなどのために、「引数と、その引数を使った処理」を特定のメソッドに渡すことができる記法となっている。さらに、ラムダ式は メソッド参照 という記法に置き換えることもできる。º»P1¼Q½14引用: 櫻庭祐一, "今こそStream API 入門", https://www.slideshare.net/skrb/stream-api-125945709
#javadoイミュータブルなListなどを作りやすくなった(ミュータブルにしたい場合は new ArrayList(alphabetList)などを実行)ミュータブルなものからcopyすることもできる(Set/Mapも同様)²™ —›••™Ÿ>)µ¶P·¸¹-„…15
#javadoOptional に渡されたものがnull だった場合に値を設定しなおしたり、例外を制御するメソッドが追加されている¾©••™Ÿ" >)µ¶P16
#javadoStreamの結果をListで取得したいことがよくあるが、toListでimmutableなリストとして取得できるようになった³•‘—"¿$À±Á>)µ¶P17引用: 櫻庭祐一, "今こそStream API 入門", https://www.slideshare.net/skrb/stream-api-125945709º»P³•‘—"¿$À±Á
#javadoInstance of で実体クラスを判定した際に、わざわざダウンキャストせずに取り扱えるようにelse部や判定式の途中でも使える。ÁŸ˜•"Ÿ›—$™ž$)Âds0ÃA?18
#javadoラムダ式や yield 式の形で、Switchの判定結果を式として設定できる˜”••›–½19
#javado""" ... """ で複数行の文字列を定義できる。SQLとか、メールのテンプレートとかいちいち文字列結合せずに、可視性高く定義できる°—œ•Ä ™›Å˜20Hello, Higuma Duke!
#javadoデータの入れ物としての専用クラス(ValueObject的に利用できる)例えばJSONのデリアライズ先やDTO、一時的に組にしたいフィールドなど、通常のクラスと区別したい(単なる)データの入れ物を用意しておくことができる。メソッドの拡張やSerializeも可能。一つのクラス内に複数のrecordを宣言することも可能。あくまでクラスとは別扱い(クラスの手っ取り早い書き方ではない)なので、継承に制限がある。Æ—›™‘§˜21と書くと、下のクラスと相当が生成される
#javadogÇ)•ȹ22
#javadoスーパークラスが、サブクラスになれるクラスを制限する³—" —§$² "˜˜—˜>ÉsxÊ1tPË$±‘—#•—”23🆗🙅
#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-125945709X)ÌMCYGkÍ•ÎJ24
#javado(|ÏЃM•‚‡GÑZ•RÒ_R)\.🤔25
#javado345671807(Ó2Ó29:†‚»ÔÕ[26
#javado345671807>34Ósʨ$3Ö07P$Ko27マーク・パール (著)、長尾高弘(訳)、及部敬雄(解説):モブプログラミング・ベストプラクティスモブプログラミング: 複数人の質疑や議論の結果で進み、 フロー効率の向上やチームの成長に 寄与する○ 難しい課題に複数人の知識、 スキル、ノウハウを総動員し取り組める○ 相互に知識・スキルを共有・継承できる○ 開発と改善(レビュー・リファクタリング) を兼ねられるひとつのプログラミング課題に、複数人のチームメンバーが、同じ場所で、ひとつのパソコンを使って、解決方法を議論しながら開発を進める手法参考文献:
#javado1. 3名以上で一カ所に集まる2. タイピスト(1名)とモブ(そのほか)に分かれる。タイピストは、パソコンの前に座る。3. 活動する時間と、時間内に到達を目指すゴール、タイピストの交代のタイミング(5〜15分ごと)を決める〈モブ〉・ ディスプレイに表示される画面を全員で見ながら、 解決すべき課題や問題点に集中し、問題解決のための方法を考え・推測・提案する・ わからないことはわかるまで質問して、学ぶ〈タイピスト〉・モブ全員の合意がとれた操作やコードの入力をする4. タイミングがきたら、タイピストを交代する。5. ゴールが達成できたら、みんなで喜ぶ(ハイタッチ!)6. モブ終了の時間がきたら、次回のモブにむけてふりかえりを行う345671807)ר28モブタイピストモブ モブモブモブ
#javadolÙ)345671807)9Ú29ZoomミーティングAWS Workspaces遠隔タイピストPCWorkspaceクライアントで接続・タイピスト操作タイピスト役音声・カメラWorkspacesの画面共有音声・カメラ共有モブ役たちIntelliJ IDEA,Zoom を起動ブラウザも利用可10分程度で交代モブ役→タイピスト役は Workspacesクライアントを起動タイピスト役→モブ役はWorkspacesクライアントを終了(変更タイミングはお知らせします)Zoomを起動遠隔タイピストPCの画面をZoom画面共有で確認しながらモブ役達でディスカッションし、タイピストへ操作依頼
#javado• 内職はやめましょう!通知がきたのでつい...は休み時間までグッと堪える。 ⇒どうしても緊急のときは、一旦モブの活動から抜けて、終了させてから戻ってくる。進行に必要な調べものも、タイピストに指示をしてみんなで同じ画面で調べる。 ⇒調べる時は一時的にタイマーをポーズしても良い。• できるだけビデオもONにしましょう!メンバーがどんな表情で参加しているかも、チームに重要な情報です。差し支えのない範囲で、カメラをONにして参加しましょう。• タイピストへ指示するときは、Zoomのコメント機能をうまく使おう!オプションを表示>コメントをつける で、画面共有に色々描ける ⇒レーザーポインタのつもりで「絵を描く」「スターをつける」で指し示す ⇒削除で消す• 細かくゴールを設定して、達成したら万歳しよう!「何分ぐらいで○○をしよう」と目標を決めてから作業をする目標が達成できたら、全員で万歳をして喜ぶ(少し大げさに)345671807)ÛÜÝ>ÞP30
#javado• 参加者の人へどんなに小さいことでも「わからない」「不安」「こういうことかな?と確認したい」が1つも残らないようにどんどん質問・確認しましょう。もちろん、プログラムのこと以外でも構いません。あなたが質問すれことで、同じ事を思っている・実は勘違いしている他の人も助かります。• 経験者の方へ参加者(初心者)の方が発言しやすい雰囲気造りや、確認の促しをしてあげてください。どんな細かいことでも共有された知識・スキルがチームの財産や蓄積になります。あながた教えることで、チームがどんどん円滑に、ゴールに進めるようになります。• Java Do スタッフへ原則経験者と同じ振る舞いですが、タイピストの暴走(モブの合議や指示のない操作)やモブの暴走(一人の意見で質疑や合議無しに進んでしまう)を防いでください。ゴールに到達したら率先して喜んでください。チームの良い雰囲気が作れます。345671807)ÛÜÝ>ßP31
#javadoグループで何か素振りができる簡単なアプリを作成して、そのなかで積極的に新しい文法を試してみましょう。(どうしてもCUIとかになりがちですが)どんなものを作るか、どの文法を試してみたいかも、モブのグループの皆さんにお任せします。例えば...・簡単なゲームを作ってみる(じゃんけん・ポーカー・トランプなど)・コロナ感染症のオープンデータをひっぱってきてファイルに書き込む(バッチ処理的な)・簡単なWebアプリを作ってみる(Spring MVCなど)・TechFulなどの演習問題の回答をJava17に作り替えてみるProcessingを使える人が運良くいる場合は、それを使うのものありかもです...(一応、モブ用マシンに組み込んだプロジェクトがおいてあります)メンバー間のレベル差もあるので、エンジニア経験が豊富な方はぜひリードをお願いします。345671807)¡sÃ32
#javadoFile > ProjectStructure の Project や Modules で、Language Level を 16 (Preview) - Sealed Types にしてください。•àáP*†k56v¦ÊB-âJã33