SlideShare a Scribd company logo
この読書会の目的

Effective-Javaを読み進める

講師が内容をまとめて、情報共有する

まともに読まずに読んだ気にする
Effective Javaについて
                 Effective Java 第二版

                 Javaのお作法が書いている本

                 「Javaやってるなら一度は読ん
                 でなきゃモグリだよねww」っ
                 て言われる本

                 定価3780円

                 ライブラリにも置いてます
この読書会の進め方

Effective-Javaの内容(章ごと)をまとめる

内容は講師が決めて良い。

次回の読書会の講師はその読書会中に決める

全部理解しなくてもいい。わかったところだけでOK
項目45

ローカル変数のスコープを最小限にする
 ローカル変数のスコープを最小にする最も強力な方
 法は、ローカル変数が初めて使用されたときに宣言
 すること。

 ほとんどすべてのローカル変数宣言は、初期化子を
 含んでいるべき。

 とくにループ変数では、そうであるべき。
項目45

ローカル変数のスコープを最小限にする
 イテレータを用いるとき
  スコープの大きいローカル変数はバグを引き起こしやすい
  コンパイルが通ってしまう
項目45

ローカル変数のスコープを最小限にする
 そんなものより、for使おうぜ
  これだとコンパイル時にエラーになる↓
項目46

従来のforループよりfor-eachループを選ぶ

 でも、そんなものよりfor-each使おうぜ
  コレクションをイテレートするならこれ!
  すごいシンプル!Iteratorとは一体何だったんだ!
項目46

従来のforループよりfor-eachループを選ぶ

 6面ダイスのサイコロを2つ転がして、表示される
 ダイスの組み合わせをすべて表示したい
  これにはバグがある
項目46

従来のforループよりfor-eachループを選ぶ

 6種類しか表示されない



 Why?
  iとjが並行してイテレートされている
  内側のforの前にiをコピーする必要がある
項目46

ローカル変数のスコープを最小限にする
 for-eachならこれでできる
  ループ変数とは何だったんだ
項目46

ローカル変数のスコープを最小限にする
 ただし、以下の3つの時は従来のfor文を使うしか無い
  フィルタリング・変換
   元のコレクションを書き換える場合


  並列イテレーション
   同時にイテレーションやインデックス変数を動かす場合


  Java 1.5以前のJavaを利用するとき
   ジェネリクスやfor-eachが使えない場合
項目46

ローカル変数のスコープを最小限にする
項目47

ライブラリを知り、ライブラリを使う
  1〜9のランダムなIntegerを受け取って、与えられた
  数を返すプログラムを作成。ただし、同じ数はカウン
  トしてはいけない。
項目47

ライブラリを知り、ライブラリを使う
  ああ、それSetで同じ事できるよ
   自分で書くより汎用的!バグも少ない!




  Javaプログラマなら、java.lang、java.util、java.ioの中身は良
  く知ってて当然ですよね
項目48

正確な答えが必要ならば、floatとdoubleを避ける
  floatとdoubleは2進不動小数点を使う
    これらでは正確に小数点を表現することができない




  /(^o^)\ナンテコッタイ
  正確に値を入力するにはintで計算し、10^nで割る。
項目49

ボクシングされた基本データより基本データ型を選

ぶ
    基本データ型

     int, float, boolean ….
    参照型

     String, List, Vector …..
    ボクシングされた基本データ

     すべての基本データ型の代用の参照型のこと
     int → IntegerのIntegerのこと。
項目49

ボクシングされた基本データより基本データ型を選

ぶ
    違いは3つある

     基本データ型は値のみを持つが、ボクシングされた基本データは値
     以外のアイデンティティ(参照先アドレス)を持っている。
      値は同じでも違うインスタンスということ
      ==使わない


     基本データ型はnullを受け付けないので注意


     基本てデータ型はボクササイズされた基本データ型より効率がいい
項目49

ボクシングされた基本データより基本データ型を選

ぶ
    間違ってもこんなことはしないように
項目50

他の型が適切な場所では、文字列を避ける
 文字列では、他の値型に対する代替としては貧弱です

  1,2,3などはint, yes/noみたいなものはboolean


 文字列は、列挙型に対する代替としては貧弱です

  Enum>>>>>>>>>>文字列 第30項目で説明がります


 文字列では、集合型に対する代替としては貧弱です
  めんどくさくてもClassを定義しましょう
項目51

文字列連結のパフォーマンスに用心する
 Stringの結合は超遅い

  O(n^2)の時間が必要
 文字列連結にはStringBuilderを使おう

  StringBuilderにはappendという連結するのメソッドがある
 ループを100回しただけで、85倍の差が出る…らしい

  未実証なので後でやると面白いかも
項目52

インターフェースでオブジェクトを参照する
 参照はなるべくインタフェースで受けましょう

  元のクラスが修正されたときに、インタフェースが同じであれば編集する
  部分が少なくて済みます。
項目53

リフレクションよりインタフェースを選ぶ
 Java.lang.reflectに関する項目

 インスタンスにインタフェースを使う

 型が明示的だから、分かりやすい。

 型がわからないときは使えない
項目53

リフレクションよりインタフェースを選ぶ
このような記述よりも




インタフェースで受け取る(ここではGalはインターフェースじゃないが…)
項目54

ネイティブメソッドを注意して使用する
 JNI(Java Native Interface)というのがある

   CやC++で書かれたメソッドを呼び出す機能


 プラットフォーム固有の機構にアクセスしたい時

 古いコードへアクセスしたい時

 パフォーマンスを高めたい
項目54

ネイティブメソッドを注意して使用する
 ネイティブメソッドは使うな!

  Java 1.3以前は利用されていたが、現在はJVMは早くなっており、必要ない
  安全じゃない
  保守が大変
  場合によってはパフォーマンスが悪くなってしまう
項目55

注意して最適化する

 最適化とは(ソースコードレベル)
  コードの可読性や安全性を犠牲にして、パフォーマンスを向
  上させること
  リファクタリングとは違う
  コンパイラの最適化ともちょっと違う
項目55

注意して最適化する

 原則として最適化を行わないこと

 最適化は悪の根源

 速いプログラムよりも良いプログラムを書くこと
項目56

一般的に受け入れられている命名規約を守る
    修飾子名                              例

パッケージ          com.google.inject, jp.ac.fun.b1008241.MyClass

クラス、インターフェース   Timer,FutureTask, LinkedHashMap

メソッド、フィールド     remove, getValue, isEqual

定数フィールド        GAME_CLEAR, SUCCESS, MAX_INTEGER

ローカル変数         I, xref, houseNumber

型パラメータ         T, E, K, V, X
項目56

一般的に受け入れられている命名規約を守る

 なにか動作するメソッド名は動詞で始める
  makeValue, drawImage, append
 Booleanはis/hasで始める
  isEmpty, hasNext, isEnabled
 アクセサはget/setで始める
  getType, setValue
まとめ

 項目45 ローカル変数のスコープを最小限にする

 項目46 従来のfor文よりfor-each文を使う

 項目47 ライブラリーを知り、ライブラリーを使う

 項目48 正確な答えが必要ならば、float,doubleを避ける

 項目49 ボクシングされた基本データ型より基本データ型を選ぶ

 項目50 他の型が適切な場所では、文字列を避ける

 項目51 文字列連結のパフォーマンスに用心する
まとめ

 項目52 インタフェースでオブジェクトを参照する

 項目53 リフレクションよりインタフェースを選ぶ

 項目54 ネイティブメソッドを注意して使用する

 項目55 注意して最適化する

 項目56 一般的に受け入れられている命名規則を守る

More Related Content

More from Hiroaki Murayama

マンガ作家の海外展開を支援するプラットフォームの開発
マンガ作家の海外展開を支援するプラットフォームの開発マンガ作家の海外展開を支援するプラットフォームの開発
マンガ作家の海外展開を支援するプラットフォームの開発Hiroaki Murayama
 
GitHubワークショップ
GitHubワークショップGitHubワークショップ
GitHubワークショップ
Hiroaki Murayama
 
春休み企画
春休み企画春休み企画
春休み企画
Hiroaki Murayama
 
KLabインターンシップ成果報告会
KLabインターンシップ成果報告会KLabインターンシップ成果報告会
KLabインターンシップ成果報告会
Hiroaki Murayama
 
画像処理入門
画像処理入門画像処理入門
画像処理入門
Hiroaki Murayama
 
趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイス趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイス
Hiroaki Murayama
 
バージョン管理勉強会
バージョン管理勉強会バージョン管理勉強会
バージョン管理勉強会
Hiroaki Murayama
 
WordPressで始めるphp入門
WordPressで始めるphp入門WordPressで始めるphp入門
WordPressで始めるphp入門Hiroaki Murayama
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門Hiroaki Murayama
 
Hakodate - simple framework
Hakodate - simple frameworkHakodate - simple framework
Hakodate - simple frameworkHiroaki Murayama
 
HSPでおいしいスープを飲む方法
HSPでおいしいスープを飲む方法HSPでおいしいスープを飲む方法
HSPでおいしいスープを飲む方法Hiroaki Murayama
 
iOS勉強会
iOS勉強会iOS勉強会
iOS勉強会
Hiroaki Murayama
 
enchant.js勉強会
enchant.js勉強会enchant.js勉強会
enchant.js勉強会
Hiroaki Murayama
 

More from Hiroaki Murayama (13)

マンガ作家の海外展開を支援するプラットフォームの開発
マンガ作家の海外展開を支援するプラットフォームの開発マンガ作家の海外展開を支援するプラットフォームの開発
マンガ作家の海外展開を支援するプラットフォームの開発
 
GitHubワークショップ
GitHubワークショップGitHubワークショップ
GitHubワークショップ
 
春休み企画
春休み企画春休み企画
春休み企画
 
KLabインターンシップ成果報告会
KLabインターンシップ成果報告会KLabインターンシップ成果報告会
KLabインターンシップ成果報告会
 
画像処理入門
画像処理入門画像処理入門
画像処理入門
 
趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイス趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイス
 
バージョン管理勉強会
バージョン管理勉強会バージョン管理勉強会
バージョン管理勉強会
 
WordPressで始めるphp入門
WordPressで始めるphp入門WordPressで始めるphp入門
WordPressで始めるphp入門
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
 
Hakodate - simple framework
Hakodate - simple frameworkHakodate - simple framework
Hakodate - simple framework
 
HSPでおいしいスープを飲む方法
HSPでおいしいスープを飲む方法HSPでおいしいスープを飲む方法
HSPでおいしいスープを飲む方法
 
iOS勉強会
iOS勉強会iOS勉強会
iOS勉強会
 
enchant.js勉強会
enchant.js勉強会enchant.js勉強会
enchant.js勉強会
 

Recently uploaded

【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
ARISE analytics
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
Osaka University
 
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
iPride Co., Ltd.
 
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
Shinichi Hirauchi
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDDなぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
ssuserfcafd1
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
kitamisetagayaxxx
 
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
Osaka University
 
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
Takuya Minagawa
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
sugiuralab
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
Yuki Miyazaki
 
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
Seiya Shimabukuro
 

Recently uploaded (14)

【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
 
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
Microsoft Azureで生成AIを使ってみた話 2024/6/14の勉強会で発表されたものです。
 
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
気ままなLLMをAgents for Amazon Bedrockでちょっとだけ飼いならす
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDDなぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
なぜそのDDDは効果が薄いのか?名ばかりDX案件での経験を踏まえて培った他の思考を交えた現代風?のDDD
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
 
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
生成AIの実利用に必要なこと-Practical Requirements for the Deployment of Generative AI
 
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT  vol112 発表資料)
ろくに電子工作もしたことない人間がIoT用ミドルウェアを作った話(IoTLT vol112 発表資料)
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
 
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
20240621_AI事業者ガイドライン_セキュリティパートの紹介_SeiyaShimabukuro
 

Effective Java 読書会1