Java女子部に行ってきた#1

# 2017年6月11日 Java女子部
[【東京】【女性/女性同伴男性限定】Java本格入門！！！著者をお招きしちゃうよ(*´∀`*) #javajo](https://javajo.doorkeeper.jp/events/60742)


## 1. 13:30～13:45 会場説明 & Java女子部について
## 2. 13:45～14:40 自己紹介
- Java女子部って何？ [くわしくはこちら](https://javajo.doorkeeper.jp/)
- 次回は7/9 ★Java女子部から世界へ★(JCP事務局から話が聞けるらしい)
- Java本格入門の著者から面白い話が聞ける！  [この本](https://www.amazon.co.jp/Java%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80-~%E3%83%A2%E3%83%80%E3%83%B3%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%BB%E5%AE%9F%E7%94%A8%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%BE%E3%81%A7-%E8%B0%B7%E6%9C%AC-%E5%BF%83/dp/477418909X)

- 参加者はまちまち
   - Java7くらいまでは、という人が多いのかな？
  - フロントエンドエンジニアもいる
  - 男性が2名。(意外と来るもんだな。)

## 3.[番外編]ログと例外(Java本格入門)
 - AcroquestTechnorogy 村田さん
  - Javaは知っていても、開発現場に来ると以外とできない・・・ことから本を執筆したとのこと。

 - ログに出力すべきものは？
  - さまざまな関係者がいると，人にとっては分かりにくいこともある

 - ログ出力において決めるべきことは？
  - ログレベルの定義
  - ログの運用レベル
  - ログフォーマット
  - ログ出力形式(ローテーション)

 - ログ実装
  - isDebugEnabled警察(笑)
  - 今はわざわざ文字列連結しなくとも、プレースホルダで置換してくれるらしい。

 - ログの運用
  - パッケージごとにログレベルが設定できる
  - 動的な設定が可能（一時的に変えることができるとのこと)

 - 例外の種類
  - Exception
  - RuntimeException
  - Error

 - 例外処理の基本
  - try ～ catch ～ finally
  - try ～ with ～ resources(便利だよね)
  - multi catch
  - 例外をもみ消さない（ログに例外を含めるようにしましょう)

 - アプリケーション方式設計と例外処理
     - アプリケーション方式設計で例外処理方式を決定する。
      - どんな例外を
      - どこでどう処理するのか
      - 例外を共通的に処理する仕組みを検討する

## 4. 14:00～15:30 Java本格入門 -from old Java to modern Java
 - AcroquestTechnorogy 谷本さん
  - ハンズオン形式で古いバージョンで書かれたものを新しいものに書き換える
     - for-each/列挙
     - 文字列連結
     - LocalDate

## 5. 15:40～16:25 StreamAPI入門 いまさら聞けないStreamのキホン
 - なぜ使うのか？
   - 今後、物事の考え方で使うことになるから？


 - Stream
   - 簡潔に記載できる
   - コレクションの集計等ができる
   - 必ずしも使わないといけないというものではない（無理して複雑なものを書いても意味ない/新しいものが常に偉いというわけではない！) 


 - Lambda式
   - 実装すべきメソッドが1つしかないインターフェースを簡潔に表すためのもの。
     - 無名クラスの中身を置き換える


- 関数型フェース
  - 実装すべきメソッドが1つしかないインターフェース(Runnnableとか)

- lambdaのキホン文法  
   ```java
     (引数) -> {処理}
   ```
          - 引数の型は省略できる
          - 処理が1行ならreturn と {} は省略できる
          - メソッド参照（引数が１つで明確であれば、省略できる) System::out::println

- Stream API
      - 作る、操作する、まとめる
          - 作る(Collection#stream / Arrays#stream / entrySet#stream/ Files#lines / BufferedReader#lines)
          - 操作する(中間操作：変換や絞り込み) map / filter
                - limit/distinct/sortedなんかもある。
                - 要素をいくつかまとめて処理するみたいなことは難しい（複数行のログファイル処理等)
                - filterで分岐することはできない（あくまえでもStreamは1本)　flatMapを使えばできる？
           - まとめる(終端操作：LstにしたりMapにしたり集約する。結果として取り出すための操作) (collect / Collectors)
                - forEach /max. min / findFirst 等もある
                - もちろん一回しかできません。

 - なぜStreamAPIを学ぶべきか
     - 学ぶのはめんどくさいとは思うが…（学ぶだけの価値を感じない…)
     - Streamを扱うことが重要。（ゆく河のながれは…)
     - Webのリクエストやキューイング処理等の上限が分からないもの(HotStream)を扱う
     - Java8のStream APIはColdStreamを扱うもの。（上限が見えているもの)
 - ノンブロッキングな非同期API(RxJava/Reactor)
     - こういうものはすべてStreamAPIのような形で記載されるようになる。
 - これからの時代は大量データ・リクエストをさばくような時代になるから、そのために準備をしておいたほうがよいとのこと。


## 6. 16:35～17:05 執筆秘話 - Java本書く入門
 - もともとは
  - 日経ソフトウェアで連載していた(Javaのイケてるコード、イケてないコード)
      - [from old java to modern java](https://www.slideshare.net/shintanimoto/from-old-java-to-modern-java)
  - 執筆にあたって、Javaのすごい人にRVしてもらったものの、ボコボコにされた…
  - 夜、ファミレスに行って書いていた（valueSetの下りはマックで書いていたときのこと。）
  - GitHubにサポートサイトがある(正誤表はここにある)
     - [javabook-support](https://github.com/acroquest/javabook-support)

## 7. 17:05～17:20 AMA
- 特になし


## 8.所感
結構なBBAなので、行くのにも躊躇しましたが、楽しめました。
あと、上記に出てくる本も買いましたが、良書だと思います。

★こんな人に読んでほしい★
 1. Javaの歴史が1.4, 5くらいで止まってるオジサン、オバサン(私はここに分類される）
 2. 基本的なAPIの使い方は分かるけど、そこから一歩踏み出したいビギナーさん