SlideShare ist ein Scribd-Unternehmen logo
1 von 33
この読書会の目的

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 一般的に受け入れられている命名規則を守る

Weitere ähnliche Inhalte

Mehr von Hiroaki Murayama

マンガ作家の海外展開を支援するプラットフォームの開発
マンガ作家の海外展開を支援するプラットフォームの開発マンガ作家の海外展開を支援するプラットフォームの開発
マンガ作家の海外展開を支援するプラットフォームの開発Hiroaki Murayama
 
GitHubワークショップ
GitHubワークショップGitHubワークショップ
GitHubワークショップHiroaki Murayama
 
KLabインターンシップ成果報告会
KLabインターンシップ成果報告会KLabインターンシップ成果報告会
KLabインターンシップ成果報告会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
 

Mehr von 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勉強会
 

Kürzlich hochgeladen

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 

Kürzlich hochgeladen (9)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 

Effective Java 読書会1