final int を
FINAL
しやがれ!
WARNING!!!!
かなり個人的な偏見が入っています
また、オーバーに表現していたりします
お気を悪くしないでくださいね
自己紹介
長岡慶一
C/C++、Java、C#、VB、ASP、.NET系
Javaはあまり好きじゃないし詳しくないけど、
ラムダ・関数IF・StreamAPI・Enum・EnumMapはめっちゃ好き!
blog : gabekore.org/twitter : @boot_kt/facebook : boot_kt
今日、言いたい事
final int を使う理由は?
んなモン
無いわっ!!!
final int を使うヤツは
Java プログラマ じゃ無ぇ!
いや、
人間じゃねぇ!
よく見る final int
◆引数・戻り値に使用するパターン
private final int PATTERN_A = 1;
private final int PATTERN_B = 2;
private final int RET_OK = 0;
private final int RET_NG = -1;
private int doHoge(int pattern) {
/*
なんか処理する
*/
return RET_OK;
}
◆連番に使用するパターン
private final int RENBAN_NAME = 0;
private final int RENBAN_ADDR = 1;
private final int RENBAN_AGE = 2;
private final int RENBAN_TEL = 3;
・
・
・
アホですか!?
メソッドの引数や戻り値に
どのfinal intを使うかなんて、
分からへんやんけ!
使うのかどうかすらも分からん!
戻り値と引数に
final int を使う事で、
どんな 意味 が
生まれたって言うんだ!?
こんなもの
定数
とは言わない!
イミフな final int
private final int COL_1 = 0;
private final int COL_2 = 1;
private final int COL_3 = 2;
private final int ROW_1 = 0;
private final int ROW_2 = 1;
private final int ROW_3 = 2;
private final int ROW_NAME = 0;
private final int ROW_ADDR = 1;
private final int ROW_AGE = 2;
なぜ final int は
悪なのか?
問題:
どの定数をどのメソッドの何に使うでしょうか?
(引数? 戻り値? 処理の中?)
private final int AAA = 0;
private final int BBB = 1;
private final int CCC = 2;
private int functionHoge(int val) {}
private int functionFuga(int val) {}
private int functionBuga(int val) {}
ンなもん
分かるかボケッ!
この
「分からない」
というのが final int が持つ問題の一つ
定数とは?
「定数」とは
✓ どこで使うべきか分かる
✓ 想定すべき値の範囲が分かる
✓ 必要な情報が一つに集まっている
そして、コンパイラが保証してくれる
じゃ、何を使うの?
Enum
Enumなら、
値
メソッド
を一括りできる
そして、
型
になる
Enumのメリット1
連番
private eum COL {
NAME
, AGE
, TEL
;
}
void setData(COL col, String data) {
column(col.ordinal()).setText(data);
}
Effective Javaではordinal()を使うなと書いてますが、
テーブルの列とか順番が決まるものはordinal()の方が実用的
private eum COL {
NAME(0)
, AGE(1)
, TEL(3); // ←★こうやって連番書く方が面倒
private final int renban;
// コンストラクタ
private COL(int no) { this.renban = no; }
int getRenban() { return this.renban; }
}
Enumのメリット2
一括り
private eum TBL {
NAME(1, 1, (entity)->entity.getName, (entity,data)->entity.setName(data))
, TEL (2, 1, (entity)->entity.getTel, (entity,data)->entity.setTel(data) )
;
private final int col;
private final int row;
private final Function<?,?> getter;
private final int BiConsumer<?,?> setter;
// コンストラクタ
private TBL(int col, int row, Function<?,?> getter, BiConsumer<?,?> setter) {
this.col = col;
this.row = row;
・・・
}
・・・
Function<?, ?> getGetter() { return this.getter; }
BiConsumer<?, ?> getSetter() { return this.setter; }
}
Enumのメリット3
型
private enum RET { OK, NG; }
private enum COL { NAME, AGE, TEL, ADDR; }
private int functionHoge(int val) {}
private RET functionFuga(COL val) {}
private int functionBuga(int val) {}
Enumのメリット4
構造体
C言語経験者が
Javaに持つ不満
第1位
構造体が無い!
構造体の代わりに、こんなの書いていませんか?
「データ持つためだけに
クラス作るのメンドクセぇーー!」
と思っていませんか?
List<StructCls> structCls = Arrays.asList(
new StructCls(0, “名前”, true , 1)
, new StructCls(1, “電話”, true , 1)
, new StructCls(2, “住所”, true , 0)
, new StructCls(3, “年齢”, false, 1)
);
これが
Enum なら
できる!
まとめ
❌ final int にメリットは無い
✓ Enum なら、連番ができる
✓ Enum なら、情報が纏まる
✓ Enum なら、型になる
✓ Enum なら、構造体的に使える
⭕ コンパイラが保証する(これ重要!)
◆最後に言いたいこと
✓ ラムダ式
✓ 関数インターフェース
✓ StreamAPI
✓ Enum
✓ EnumMap
これらを全力で使え!
コードがアホほど大幅に変わる! マジでっ!
参考書籍
おしまい
gabekore.org/final-int-is-final

More Related Content

PDF
ジェネリック関数の呼び出され方 #cocoa_kansai
PDF
リテラルと型の話 #__swift__
PDF
ゲーム開発者のための C++11/C++14
PDF
Better C#の脱却を目指して
PDF
Swift 2.0 で変わったところ「前編」 #cswift
PPTX
BoostAsioで可読性を求めるのは間違っているだろうか
PDF
組み込みでこそC++を使う10の理由
PDF
templateとautoの型推論
ジェネリック関数の呼び出され方 #cocoa_kansai
リテラルと型の話 #__swift__
ゲーム開発者のための C++11/C++14
Better C#の脱却を目指して
Swift 2.0 で変わったところ「前編」 #cswift
BoostAsioで可読性を求めるのは間違っているだろうか
組み込みでこそC++を使う10の理由
templateとautoの型推論

What's hot (20)

PDF
Swift 2.0 の Error Handling #yhios
PDF
プロトコル指向に想う世界観 #__swift__
PPT
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
PDF
Kanazawa.js.Next
PPTX
PDF
SEH on mingw32
PDF
emc++ chapter32
ODP
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
PDF
Swift 2.0 で変わったところ「後編」 #cswift
PDF
C++ Template Meta Programming の紹介@社内勉強会
PDF
Visual C++コード分析を支えるSAL
PDF
Effective modern-c++#9
PPTX
Visual C++で使えるC++11
PDF
effective modern c++ chapeter36
PDF
可変値変数 var を極力避けることを模索するための事前知識 #cswift
PDF
Effective Modern C++ 勉強会#3 Item16
PDF
C++ ポインタ ブートキャンプ
PDF
知って得するC#
PDF
yieldとreturnの話
PDF
Scalaの限定継続の応用と基本
Swift 2.0 の Error Handling #yhios
プロトコル指向に想う世界観 #__swift__
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
Kanazawa.js.Next
SEH on mingw32
emc++ chapter32
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
Swift 2.0 で変わったところ「後編」 #cswift
C++ Template Meta Programming の紹介@社内勉強会
Visual C++コード分析を支えるSAL
Effective modern-c++#9
Visual C++で使えるC++11
effective modern c++ chapeter36
可変値変数 var を極力避けることを模索するための事前知識 #cswift
Effective Modern C++ 勉強会#3 Item16
C++ ポインタ ブートキャンプ
知って得するC#
yieldとreturnの話
Scalaの限定継続の応用と基本
Ad

Similar to final int をFINAL しやがれ! (6)

PPTX
Effective java 輪読会 第6章 項目32-34
PPTX
Effective java 輪読会 第6章 項目30-31
PPTX
競技プログラミングのためのC++入門
PPTX
Effective Java 読書会1
PDF
Javaセキュアコーディングセミナー東京第4回講義
PDF
Pfi Seminar 2010 1 7
Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目30-31
競技プログラミングのためのC++入門
Effective Java 読書会1
Javaセキュアコーディングセミナー東京第4回講義
Pfi Seminar 2010 1 7
Ad

final int をFINAL しやがれ!