書ききれる範囲で

メモ書き集

PythonのFunctionにReturnを付けるべきか

基本的には戻す値がない場合は不要。

 

戻す値がある場合のみ必要。

 

ForのReturnと混同しないように注意すること。

混同しないように、書かなくていいものは書かない方が可読性が高いと思われる。

 

    def nest_dict(self):
        '''
        直列化されたディクショナリを分解する

        '''
        for k, v in self.flat_dict.items():
            self._nest_dict_rec(k, v, self.result)
        return

 

Javaの文字列結合で+=演算子は使うべきか

Javaの文字列結合はいくつかの方法があり、議論の多い部分。

基本的にはStringBuilderを使うのがベストということで結論は出ているが、場合によってはStringBuilderを使うほどでもないケースがある。

性能問題が出ずに拡張性も不要のテストメソッドなどの場合は+演算子で済ませることもあるが、今回はじめて+=演算子が使えることを知った。

これがどの程度有効かを調べた。

 

記述方法はひしだまさんのブログで紹介されている。

+=演算子がいつから使えるのかは把握していないが、1.5では既に使えたよう。

ひしだまさんのブログではそれぞれの結合方法がどのようにコンパイルされるかも検証されている。

 

www.ne.jp

 

 

きしださんがブログで文字列結合を取り上げているが、+=は登場しない。

やはり一般的な方法ではないようだ。

それもそのはずで、+でさえ非効率なのに、さらにStringBuilderが毎回作成されてしまうので、選ぶ理由がない。

nowokay.hatenablog.com

 

 

結論はセオリー通りになるが、文字列結合を複数回繰り返すような場合はStringBuilderを、性能を気にせず簡素に書きたい場合は+を使うのが良い。

+=を使う理由はない。

 

 

自クラス内のフィールドへのアクセスにgetter/setterを使うか問題

アクセッサはprivateフィールドへのアクセスを制限するために用いられるものだが、自クラス内でフィールドへアクセスする場合でも使ったほうがいいのか。 結論は「ケースバイケース」なのだが、私の個人的な見解は「使わないほうがいい」である。

自クラス内でアクセッサを使う例を以下に記す。 これはlombokを使っているケースだが、使わないほうがクラスの見通しがいいと思う。

そもそもインスタンスフィールドのアクセス修飾子はそのインスタンスを利用するクラスからのアクセスを制限するもの。 それをprivateに制限し、アクセッサで管理することによってカプセル化を実現している。

自クラスのフィールドはprivateであっても自由にアクセスできるため、カプセル化の対象にならない。 カプセル化された外向けのアクセッサと、カプセル化対象外の内側のロジックは一緒にするべきではないという考え方を支持する。

アクセッサを使わない例

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class User {

    private String id;
    private String name;

    public User(String id, String name) {

        this.id = id;
        this.name = name;

    }
}

アクセッサを使う例

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class User {

    private String id;
    private String name;

    public User(String id, String name) {

        setId(id);
        setName(name);

    }
}

Java学習用書籍

Javaの学習をしていた頃に使った教材を紹介します。

 

★初級

まず入門書はスッキリシリーズがおすすめ。

とても分かりやすい。

book.impress.co.jp

 

 

Javaの文法だけなら入門編でも十分だが、JavaAPIを使いこなしていくには実践編もおすすめ。2冊目に。

 

book.impress.co.jp

 

 

3冊目はJavaを使ってなにをするかによって変わってくるが、Webアプリケーションを組むことが多いと思うので、ほとんどの人はスッキリシリーズでサーブレット&JSPまでやっておくのがおすすめ。

book.impress.co.jp

 

 

★中級

Oracleの資格は取っても取らなくてもいいんだけど、資格の勉強はJavaAPIを体系的に学べるので時間があればおすすめ。

Silverはスッキリシリーズの知識で十分取れる内容なので、初学者にとってはコスパは悪くないと思う。なおBronzeは全く取る必要なし。Silverから受けよう。

book.impress.co.jp

 

 

スッキリシリーズの知識だけでSilverを受験しようとしたときに、もし躓いたり立ち止まることが多いならパーフェクトJavaを副読本として利用するのがおすすめ。

章ごとにテーマがよくまとまっているので、逆引きもしやすく使いやすい。

gihyo.jp

 

 

Goldはスッキリシリーズの知識だけでは不足するので、副読本が必要。

Goldまで取っておけば、仕事でJavaフレームワークを使っていてもだいたい中身が読めるので困ることがない。

あとここまでのJavaの学習をちゃんと修了してますよっていう証明にある程度なる。せっかく学習したのなら取っておいても無駄にはならないと思う。

book.impress.co.jp

 

 

Goldの副読本の1冊目。

Javaプログラマ必携の1冊なので、試験を受けない人も一読しておくこと。

www.maruzen-publishing.co.jp

 

 

Goldの副読本の2冊目。 

デザパタは必修ではないが、Goldの試験にも一部登場するし、JavaAPIフレームワークを解読するためには要る。必要に応じて参照すること。

www.hyuki.com

 

 

★上級?実践級。

ここからは完全にJavaを使って何をするのか、どんな仕事に就くのかによる。

Webアプリケーションを作る人が多いと思うので、Webアプリケーションフレームワークの学習がおすすめ。

 

gihyo.jp

 

www.shoeisha.co.jp

 

 

とりあえずここまでやっておけば、Javaを書く仕事(特にエンプラ系)では困らないと思う。

 

仕事にするにはHTMLやネットワーク、RDBなどの知識も必要だけど、ここでは省く。

Amazonのセラーアカウントがロックされた場合

Amazonのセラーアカウントを長期間放置していたら「無認可」になっていた。

 

また、以下のメッセージが表示された。

 

「このEメールアドレスは、非アクティブ化された出品者のアカウントに関連付けられています。 アカウントの再アクティブ化をリクエストするには、seller-performance@amazon.comでお問い合わせください。」

 

原因は不明だが、解決方法はAmazon.comのメールアドレスを変更すること。

Amazon.co.jpAmazon.comで同じメールアドレスを使用していると、ロックされることがある模様。

Amazon.co.jpのセラーアカウントを使いたいならば、Amazon.com側のメールアドレスを別のものに変更すると解決する。

 

 

2020.07.15 追記

上記対応で一時的にログインできたが、また無認可になった。

AWSのサポートに問い合わせたところ、出品用アカウントが凍結されて復元は不可能らしい。新しいメールアドレスで改めてアカウントを作り直してほしいとのこと。