みろりHP


緑色さんの多目的ブログ
みろりえいちぴー
ごゆるりとおくつろぎあさーせ。
| カテゴリ:プログラミング |
Joshua Block『Effective Java 第二版』 前半



プログラミング言語Javaの技術書。しかも入門編じゃなくて少々上級みたい。知り合いがもってたんで借りて読んだ。Javaとか知らんけれど、まあpythonの知識の応用で読めるんじゃない? って思って。それに読書は雑食に行いたいからね。

「言語」を扱うのに必要なのは、文法、語彙、慣習だ。それはプログラミング言語も同じである。一等高度なのがみっつめの慣習だ。これはよく理解できる。英語も、文法や語彙は簡単にわかるけれど慣習は身につけるのが難しい。プログラミング言語も、基礎的な文法はもうわかってるけれど、所詮ひとりで遊んでるものだから慣習とか書き方の流儀って点では俺のスクリプトはもうきっとめちゃくちゃなのだろう。そしてこの本はまさにその慣習を扱っているようだ。なるほどこれは上級だ。この本ではその慣習を、78項目に整理して書いてある。なんとなーくわかったものについてだけサマリと感想を書く。



コンストラクタじゃなくてstaticファクトリーメソッドを使え
  • ファクトリーメソッドってのは新しいインスタンスを作って返すメソッドのことみたい。
    @staticmethod
    def foo():
        return Klass('f', 'fo', 'foo')
    
    @staticmethod
    def bar():
        return Klass('b', 'ba', 'bar', 'barr')
    
    つまりこういうことかな? インスタンスを新しく作るときの面倒くさい初期値設定とかを省略できるようにするみたいな。作成するインスタンスごとにそれを作るファクトリーメソッドに名前をつけられるのがわかりやすくていい。

大量のコンストラクタパラメータに直面したらビルダーパターンを使え
  • Javaではメソッドのオーバーロードってものがある。pythonでは同じ名前のメソッドって作れないけど、Javaでは引数さえ違えば同じ名前のメソッドをいくつも作れて、それをメソッドのオーバーロードっていうようだ。
  • で。そのオーバーロードを利用して、コンストラクタを複数用意することができる。でもあんまりにもコンストラクタが多いときはビルダーパターンを使う。確かにこれはすげーなって思ったけど、これpythonでは名前付きオプションパラメータと引数デフォルト値があるからまったく必要なさそう。でも自分自身を return するメソッドっていうのはなるほどと思った。

インスタンス化不可のクラスを作る方法
  • アクセッサが private のコンストラクタを作り、中に
    throw new AssertionError();
    を書く。

定数を作るなかでなんべんも同じオブジェクトを作ってるならムダだからやめること
  • そういうときは定数の中身を
    static {}
    の中で埋める。

ファイナライザを避けること
  • try,finally のことだと思うんだけれど、なんでかよくわからん。なんか、ちゃんと事項される保証がないみたい。

equalsメソッドをオーバーライドするときは気をつけて
  • Javaのインスタンスにはたいていequalsメソッドがあって、それを使うことでインスタンス同士がイコールかどうかわかるらしい(
    instance.equals(instance2)
    )。クラスを継承するときはつねにこのルールが守られるようにしようねってことみたい。

equalsメソッドをオーバーライドするときはhashCodeメソッドもしないとダメ
  • ハッシュなるもの(よくわからん)が同一性の確認に1枚噛んでるってことはギリわかった(ギリ)。

すべてのサブクラスはtoStringメソッドをオーバーライドせよ
  • あー! これはアレでしょpythonでいうところ
    __repr__
    のことでしょう。わかるぜ。

うまく設計されたモジュールは、実装の詳細とAPIをハッキリ区別している
  • API部分はアクセッサを public にして、その他は全部 private とか protected にせよってことみたい。

publicのクラスではpublicフィールドじゃなくてアクセッサメソッドを使う
  • public float x
    じゃなくて
    public float getX()
    にしとけってことのようだけどよくわからん。まあともかくクラスの中の大事なところはしっかりと隠蔽すべきってことはわかったと思う。

クラスの可変性を最小限にせよ
  • オブジェクトの状態を変更するメソッドを提供しない、拡張不可にする、全フィールドを final にする、全フィールドを private にする、など。

継承よりコンポジションを選ぶこと
  • まったくピンとこない。こういうのはピンと来ないときに読んでもダメ。

インタフェースは型を定義するのに使う
  • 間違っても定数の詰め合わせを書くな。それをやりたいなら定数ユーティリティクラスを作り、上述のprivateコンストラクタでインスタンス化を防ぐこと。pythonにインタフェースも型定義もないため、俺が興味をもつべきなのが微妙。

タグ付クラスを使うな
  • パラメータの値によって、そのインスタンスの役割がまったく変わっちゃうようなもののことをいうようだ。そういうときは継承を使って、別物のクラスにしなさいってこと。わかるぜ、初心者のころよくやっちゃう奴だよね。俺は最近脱却できてるけれど、クラスとかがよくわかってないと、ついつい継承とか使うのを面倒がって、全部ひとつのクラスに収めようとしちゃうんだよね。

ジェネリックまわり
  • まったくわからんジェネリックてなんぞ。

int定数ではなくenumを使うこと
  • APPLE = 0
    ORANGE = 1
    
    みたいなのは int enum パターンといって、クソ実装らしい。クソw これ俺よくやるわ! そういうのは
    enum FRUIT { APPLE, ORANGE }
    って書くべき。このenumってやつ、便利そう。pythonにもあんのかなあ?



わからんところは躊躇なくスキップしてるので、ザクザク進んでる。300ページ級の大判本だから、この調子でサクザクいこう。


| 緑色 | プログラミング | comments(0) |
| カテゴリ:みろりHP |
アコギ Zedd and Alessia Cara『Stay』



先日街を歩いていたら、この曲が流れていた。お、好みのメロディーと思ったのだけど、歌詞が聞き取れなかった。幸運にも隣にルーマニア人がいて、歌詞を聞き取り、ググってくれて、この曲を知った。ほんでふたりで聴いてみたら、そいつが「歌詞がなかなかいいじゃん!」というわけだ。俺はぱっと聴きで歌詞の意味がわかるレベルではないので、歌詞をググり、ようやく「へえ! なんだろう共感はできないんだけど、個人的に思い入れを感じるなあ……なかなかいい歌詞じゃん!」「だから言っとるやん!」みたいな流れで今月のアコギはこれにした。

気に入った曲だからと挑戦するのはいいんだけど、声量と声域が追いつかなくて歌はかなり狂っちまった。正直なところ、うまく歌えんし、平凡なストロークでもあることだし、今回は録音するのヤメよかなと思った。だけどした。やっぱり、作ったものをかたちに残しておくのは俺にとってとても大事だから。
平凡なストロークとはいうが、実は今回の曲はネットを探しても満足いくコード譜が見つからなくてタイヘンだった。なんでだろう、どのコード譜も、部分的には納得いくのだけど、他の部分は曲と合ってないように感じた。だからあちこちから納得いった部分を抜き出し切り貼り入れ替えして自分でコード進行を作った。せっかくだからそれを書いておこうかな。カポはなし。

Verse
  • C Em D, C Em D, C D Em, C C D
Pre-Chorus
  • C Em D, C Em D, C D Em, C D
Chorus
  • C D Em G, C D Em G, C D Em G, C D Em



弾き語りは弾き語りで、ずっと歌詞とにらめっこするから、結果的に歌詞への理解が深まるのが楽しめていい。


| 緑色 | みろりHP | comments(0) |
     12
3456789
10111213141516
17181920212223
24252627282930
<< September 2017 >>
+ みろりHP内検索
+ 閲覧記事
+ 過去記事アーカイブ
+ カテゴリ
+ 年月選択
  • 2017年 09月 (3)
  • 2017年 08月 (6)
  • 2017年 07月 (8)
  • 2017年 06月 (4)
  • 2017年 05月 (7)
  • 2017年 04月 (8)
  • 2017年 03月 (7)
  • 2017年 02月 (10)
  • 2017年 01月 (6)
  • 2016年 12月 (8)
  • 2016年 11月 (8)
  • 2016年 10月 (5)
  • 2016年 09月 (5)
  • 2016年 08月 (7)
  • 2016年 07月 (9)
  • 2016年 06月 (6)
  • 2016年 05月 (8)
  • 2016年 04月 (10)
  • 2016年 03月 (10)
  • 2016年 02月 (8)
  • 2016年 01月 (9)
  • 2015年 12月 (9)
  • 2015年 11月 (6)
  • 2015年 10月 (5)
  • 2015年 09月 (4)
  • 2015年 08月 (8)
  • 2015年 07月 (5)
  • 2015年 06月 (3)
  • 2015年 05月 (7)
  • 2015年 04月 (8)
  • 2015年 03月 (12)
  • 2015年 02月 (8)
  • 2015年 01月 (4)
  • 2014年 12月 (5)
  • 2014年 11月 (5)
  • 2014年 10月 (7)
  • 2014年 09月 (4)
  • 2014年 08月 (7)
  • 2014年 07月 (6)
  • 2014年 06月 (4)
  • 2014年 05月 (12)
  • 2014年 04月 (9)
  • 2014年 03月 (6)
  • 2014年 02月 (6)
  • 2014年 01月 (8)
  • 2013年 12月 (7)
  • 2013年 11月 (10)
  • 2013年 10月 (10)
  • 2013年 09月 (9)
  • 2013年 08月 (11)
  • 2013年 07月 (10)
  • 2013年 06月 (9)
  • 2013年 05月 (15)
  • 2013年 04月 (11)
  • 2013年 03月 (5)
  • 2013年 02月 (7)
  • 2013年 01月 (6)
  • 2012年 12月 (9)
  • 2012年 11月 (10)
  • 2012年 10月 (10)
  • 2012年 09月 (4)
  • 2012年 08月 (2)
  • 2012年 07月 (7)
  • 2012年 06月 (13)
  • 2012年 05月 (13)
  • 2012年 04月 (15)
  • 2012年 03月 (4)
  • 2012年 02月 (12)
  • 2012年 01月 (9)
  • 2011年 12月 (5)
  • 2011年 11月 (13)
  • 2011年 10月 (2)
  • 2011年 09月 (2)
  • 2011年 08月 (1)
  • 2011年 06月 (1)
  • 2011年 05月 (4)
  • 2011年 04月 (10)
  • 2011年 03月 (8)
  • 2011年 02月 (11)
  • 2011年 01月 (14)
  • 2010年 12月 (14)
  • 2010年 11月 (17)
  • 2010年 10月 (17)
  • 2010年 09月 (19)
  • 2010年 08月 (22)
  • 2010年 07月 (18)
  • 2010年 06月 (16)
  • 2010年 05月 (19)
  • 2010年 04月 (15)
  • 2010年 03月 (22)
  • 2010年 02月 (18)
  • 2010年 01月 (18)
  • 2009年 06月 (2)
  • 2009年 04月 (1)
  • 2007年 12月 (10)
  • 2007年 11月 (7)
  • 2007年 10月 (9)
  • 2007年 09月 (4)
  • 2007年 07月 (5)
  • 2007年 06月 (11)
  • 2007年 05月 (6)
  • 2007年 04月 (4)
  • 2006年 01月 (20)
  • + ブックマーク
    + 最近のコメント
    + アクセスカウンター
    全体(since 2010.02.03.)
    今日… 昨日…