Promiseから見るJavaとJavaScriptの違い

>100 Views

November 17, 25

スライド概要

profile-image

Javaエンジニアです。最近は研修講師をやっています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Promise から見るJavaとJavaScriptの 違い

2.

Promise 概要 とは は、JavaScriptで「未来の値」を扱うための仕組み。 Promise オブジェクトを作成すると、 実際に値が返る前の“仮の箱”が作られます。 呼び出し元は結果を待たずに次の処理を進められます。 ( =非同期処理ができる ) Promise

3.
[beta]
コード例1
API

呼び出し

fetch("http://localhost:8080/api/holiday") // fetch()はPromiseオブジェクトを返す
.then((res) => res.json())
// then()は非同期処理が成功したときに動く
.then((data) => {
setHolidays(data);
})
.catch((e) => {
// catch()は非同期処理が失敗した時に動く
setError(e.message);
});

4.

内部構造 種類 名前 備考 状態 pending / fulfilled / rejected 進行中・成功・失敗を表す 関数 resolve() / reject() 状態を変更する メソッド then() / catch() / finally() 結果を受け取る処理を登録する

5.
[beta]
コード例2
Promise

オブジェクトを自分で定義する場合

const promise = new Promise((resolve, reject) => {
const success = Math.random() > 0.5; // 50%で成功・失敗をランダムに決定する
if (success) {
resolve("データ取得成功!");
} else {
reject("ネットワークエラー!");
}
});
promise
.then(result => console.log("成功:", result)) // "成功: データ取得成功!"
.catch(error => console.log("失敗:", error)); // "失敗: ネットワークエラー!"

6.

ここで疑問 const promise = new Promise((resolve, reject) => { // 略 if (success) { resolve("データ取得成功!"); } else { reject("ネットワークエラー!"); } }); // 略 new Promise() のカッコの中は何をしている?

7.

new Promise() のカッコの中身 まず、 のカッコの中身はPromiseオブジェクトのコン ストラクタの引数。これはJavaと同じ。 1 つ目の違いは、 JavaScript ではコンストラクタの引数に関数を与えら れるということ。(コールバック関数) Java でコンストラクタの引数にメソッドを与えることはできない。 ( メ ソッドを値として扱えないから) 2 つ目の違いは、コンストラクタの引数に書いている関数に引数を与 えられるということ。 この書き方もJavaではできない。 new Promise()

8.

結局、 new Promise() で何をしているのか? を呼ぶと、JavaScriptエンジンが と という 状態変更関数 を作って、コンストラクタに渡してくれる。 2. 1. で受け取った 2 つの関数を使って、非同期処理が成功したときと 失敗したときの動きを定義している この動きは、「成功/失敗時の動作を後から決める」仕組み。 これは、Javaのインターフェースを使って「実装を後から決める」仕 組みと似ている。 1. new Promise() resolve reject

9.

まとめ:JavaScriptとJavaの比較 JavaScript 動作の渡し方 Java インターフェースで実装を 関数をそのまま渡す 渡す とりあえず動く、柔 型安全・厳密さ 軟 言語の思想 プログラミング 関数を組み合わせる オブジェクトを構成する 文化