【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で実装するデメリット
- コードが煩雑になる。
- クロスブラウザに対応できない。
Atomパッケージ管理Memo
参考にさせていただいたページ
apmコマンド、atomコマンドを使えるようにする
ショートカット
command+shift+p
でコマンドパレットを開くWindow: Install Shell Commands
と入力して実行
これでatom
コマンドでターミナルからAtomを起動できたり、apm
コマンドでパッケージのインストール・管理などができるようになります。
apmコマンドの使い方
コマンド | 機能 |
---|---|
apm search 検索ワード |
パッケージの検索 |
apm install パッケージ名 |
パッケージのインストール |
apm list |
インストールしたパッケージの一覧表示 |
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を利用したディレクトリ構成の方法が書かれていたので、次回挑戦してみたいと思います。
+@
ディレクトリ構成を書くときに使う記号の変換の仕方。参考にさせていただきました。
今回はmacで、「けいせん」で変換しています。
Java Silver 合格までを振り返る
先日、Java SE8 Silver認定資格に無事合格しました。
教材
徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応
- 作者: 志賀澄人,株式会社ソキウス・ジャパン
- 出版社/メーカー: インプレス
- 発売日: 2016/01/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
勉強期間
約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に今いるブランチ名を表示させる
こちらの記事を参考にしました。
前回、HomebrewでGitをインストールしたので、git-completion.bash
は既にありました。
行った作業は、
ホームディレクトリに
.bashrc
を作成.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\]\$ '
これでブランチ名が表示されるようになりました。