備忘録

Java中心に勉強中。備忘録です。

【JavaGold勉強】組込み関数型インタフェース

JavaGoldの勉強をしているのですが、組込み関数型インタフェースの種類がいつも頭から抜けてしまうので定着させたい!と思いメモします。


関数型インタフェースとは

抽象メソッドが1つだけ定義されているインタフェースのこと。 (defaultメソッドやstaticメソッドはカウントしない。
)

Java8で追加されたパッケージ「java.util.function」

全部で43のインタフェースが提供されているが、基本になるのは以下の4つ。

型名 抽象メソッド 引数 戻り値
Supplier T get() なし T型
Predicate boolean Test(T t) T型 boolean型
Consumer void accept(T t) T型 なし
Function<T,R> R apply(T t) T型 R型

ラムダ式による実装イメージ

Supplier<String> supplier = () -> "return";
System.out.println(supplier.get());//returnと表示される。


Predicate<String> predicate = str ->  str.equals("true");
System.out.println(predicate.test("true"));//trueと表示される。


Consumer<String> consumer = str -> System.out.println(str);
consumer.accept("Hello!");//Hello!と表示される。


Function<String, String> function = str -> "\" + str + "/";
System.out.println(function.apply("OK!"));//\OK!/と表示される。

@FunctionalInterfaceアノテーション

付与すると、関数型インタフェースの条件を満たしているかどうか、コンパイル時にチェックしてくれる。 必須ではないが、付与すると誤って複数の抽象メソッドを定義してしまうのを防ぐことができる。 Java7までに追加されていた既存のインタフェースの内、関数型インタフェースの条件を満たすものにも付与されている。


簡単でも表とコードを書いてみることでちょっと定着した気がします。派生のインタフェースについてもまとめられればと思います!

はじめてのAjaxメモ①

Ajaxについて、なんとなく知ってるけど触ったことがなかったので基礎から調べてみました。

Ajaxとは

「Asynchronous JavaScript + XML」の略で、非同期通信を実現する仕組み。

GoogleMapに使われていたり、SPA(Single page application)を支える技術として有名。

名前にXMLとついているが、JSONなど他の形式のデータも扱うことができる。

XMLHttpRequestオブジェクト

ブラウザ上でサーバーとHTTP通信を行うためのAPI

XMLHttpRequest - Web API インターフェイス | MDN

生のJavaScriptで実装してみる

var req = new XMLHttpRequest();
var url = 'アクセスしたいURL';

function ajaxsample() {

    req.open('GET', url); //リクエストの初期化
    req.send(); //リクエストをサーバーに送信する

    req.onreadystatechange = function() {
        if(req.readyState === 4) {
            if(req.status === 200) {
                //通信成功時の処理
            }else{
                //通信失敗時の処理
            }
        }else{
            //通信中の処理
        }
    }
}

onreadystatechangeプロパティに代入した関数は、readyStateプロパティが変化するたびに呼び出される。readyStateプロパティは以下のような値をとるので、

簡単な説明
0 open()が呼ばれていない
1 open()が呼び出し済み
2 send()が呼ばれていない
3 ダウンロード中
4 操作が完了した

XMLHttpRequest.readyState - XMLHttpRequest | MDN

4(操作が完了した)になった時にステータスコードをチェックし、処理を分岐させている。

生のJavaScriptで実装するデメリット

生のjsで書いてみてAjaxの基礎の部分が少し理解できたので、次回はjQueryでの書き方他をまとめたいと思います。

Atomパッケージ管理Memo

参考にさせていただいたページ

mae.chab.in

apmコマンド、atomコマンドを使えるようにする

  1. ショートカットcommand+shift+pでコマンドパレットを開く

  2. Window: Install Shell Commandsと入力して実行

これでatomコマンドでターミナルからAtomを起動できたり、apmコマンドでパッケージのインストール・管理などができるようになります。

apmコマンドの使い方

コマンド 機能
apm search 検索ワード パッケージの検索
apm install パッケージ名 パッケージのインストー
apm list インストールしたパッケージの一覧表示

apmを使って、他の環境にパッケージを一括インストールしたりできるみたいです。便利!
必要になったらまた調べてみます。

memo:設定ディレクトリ.atomは~直下に作られました

Gradleプロジェクト構成を作る

プロジェクト名は「sample_project」とします。

1. sample_project配下でgradle init

設定ファイルであるbuild.gradleや、必要なディレクトリが生成されます。

2. Gradleのディレクトリ構成を作る

mkdir -p src/main/java src/main/webapp src/test/java

sample_project
  └ src
    ├main
    │ ├ java
    │ └ webapp
    └ test
      └ java
(gradle.initで生成したものは表記していません)


こちらの記事に、gradleを利用したディレクトリ構成の方法が書かれていたので、次回挑戦してみたいと思います。

d.hatena.ne.jp


+@
ディレクトリ構成を書くときに使う記号の変換の仕方。参考にさせていただきました。
今回はmacで、「けいせん」で変換しています。

qiita.com

        

Java Silver 合格までを振り返る

先日、Java SE8 Silver認定資格に無事合格しました。

教材

徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応

徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応

勉強期間

約1ヶ月

  • 1週目

    • 1日約8時間勉強
    • 黒本1章〜9章を2周、10章を1周。
    • まとまった勉強時間が取れるのはこの週だけで、10章の模擬問題の得点は5割程度だったので少し焦る。
  • 2週目

    • 1日約0.5〜1.5時間勉強
    • 10章を解き直しながら、少しでも疑問に思った分野は1〜9章に戻って復習。
    • 頻出のメソッドや構文の特徴を表にまとめて覚える。
    • 問題集に載っているコードを写し、挙動を確認。
  • 3週目

    • 2週目とほぼ同じ勉強法。
    • 11章の模擬問題に挑戦。正答率6割弱でかなり焦る。
  • 4週目

    • 11章を解き直しながら、少しでも疑問に思った分野は1〜9章に戻って復習。
    • 前日に10章を2周目を解き、当日朝に11章も解き直して臨んだ。

こんな感じで勉強を進めました。

個人的には、黒本をベースに、分からない所を調べたりAPIを読み込んだりすれば1〜2ヶ月ほどで合格できるのかなと感じました。

当日は、余裕を持って見直しもできましたが、緊張のあまり途中でお手洗いに行きたくなってしまい焦りました・・・水分はほどほどに!

勉強後にJavaに触ると、変数のスコープを自然と意識できたり、宣言のミスにすぐ気がつけたりと、以前よりスムーズにプログラムが組めるようになった気がします。

以前はeclipseに注意されるがままにコンパイルエラーを修正していましたが、今はなぜエラーが出ているのかを理解して直せていると思います。

例外処理についてもしっかり問われるので、基礎を固めることができました。

Goldも今年度中に勉強計画を立てて受験したいと思います。

bashに今いるブランチ名を表示させる

こちらの記事を参考にしました。

qiita.com

前回、HomebrewでGitをインストールしたので、git-completion.bashは既にありました。

行った作業は、

  1. ホームディレクトリに.bashrcを作成

  2. .bashrcに以下のように書き込む。

usr/local/Cellar/git/<gitのversionの数字>/etc/bash_completion.d/git-prompt.sh
usr/local/Cellar/git/<gitのversionの数字>/etc/bash_completion.d/git-completion.bash
GIT_PS1_SHOWDIRTYSTATE=true
export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '

これでブランチ名が表示されるようになりました。

HomebrewでGitのインストール

HomebrewでGitをインストールします。

brew install git

このままだとMacに標準で入っているGitを参照してしまうので、PATHを通します。

参考にさせていただいたページ↓

qiita.com

motomichi-works.hatenablog.com

手順を要約すると

  1. HomebrewでGitをインストール

  2. ホームディレクトリ直下に.bash_profile作成

  3. vi .bash_profileで開き、中にパスを記述(記事参照)

  4. git versionで確認

でした。