1 2 3 4 5 6 7 8 9 10 11 |
const gfc = function*(limit) { for (let i = 0; i < limit; i++) { yield i; } }; const g = gfc(5); for (const v of g) { console.log(v); } |
1 2 3 4 5 |
0 1 2 3 4 |
1 2 3 4 5 6 7 8 9 10 11 |
const gfc = function*(limit) { for (let i = 0; i < limit; i++) { yield i; } }; const g = gfc(5); for (const v of g) { console.log(v); } |
1 2 3 4 5 |
0 1 2 3 4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
// イテレータはイテレータリザルトを返却するメソッド(next)を持つオブジェクトである // イテレータリザルトはプロパティvalueとdoneを持つオブジェクトである // イテラブルなオブジェクトとはイテレータを返却しうるオブジェクトである const createIterable = limit => { const iterable = {}; iterable[Symbol.iterator] = () => { const iterator = {}; let cnt = 0; iterator.next = () => { const iteratorResult = { value: cnt++, done: false }; if (limit < cnt) { // 終わっている iteratorResult.done = true; } return iteratorResult; }; return iterator; }; return iterable; }; const iterable = createIterable(5); for (const value of iterable) { console.log(value); } |
1 2 3 4 5 |
0 1 2 3 4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
'use strict'; const isContains3Recursive = num => { if (num === 0) { return false; } const keta1 = num % 10; if (keta1 === 3) { return true; } num -= keta1; num /= 10; return isContains3Recursive(num); }; const doNabeatsu = limit => { for (let i = 1; i <= limit; i++) { if (i % 3 === 0) { // 3の倍数である console.log(i + '!'); } else if (isContains3Recursive(i)) { // 3を含む数字である console.log(i + '!'); } else { console.log(i); } } }; doNabeatsu(100); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
1 2 3! 4 5 6! 7 8 9! 10 11 12! 13! 14 15! 16 17 18! 19 20 21! 22 23! 24! 25 26 27! 28 29 30! 31! 32! 33! 34! 35! 36! 37! 38! 39! 40 41 42! 43! 44 45! 46 47 48! 49 50 51! 52 53! 54! 55 56 57! 58 59 60! 61 62 63! 64 65 66! 67 68 69! 70 71 72! 73! 74 75! 76 77 78! 79 80 81! 82 83! 84! 85 86 87! 88 89 90! 91 92 93! 94 95 96! 97 98 99! 100 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
'use strict'; const myForOf = (ary, callback) => { const iterator = ary[Symbol.iterator](); while (true) { const iteratorResult = iterator.next(); if (iteratorResult.done) { break; } callback(iteratorResult.value); } }; const ary = ["A", "B", "C"]; myForOf(ary, console.log); |
1 2 3 |
A B C |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
'use strict'; const createTimeoutPromise = (ms, callback, errMsg) => { return new Promise((resolve, reject) => { if (errMsg) { reject(errMsg); }; setTimeout(() => { resolve(callback()); }, ms); }); }; const getLastNameBy50ms = (errMsg) => { return createTimeoutPromise(50, () => "田中", errMsg); }; const getFirstNameBy30ms = (errMsg) => { return createTimeoutPromise(30, () => "太郎", errMsg); }; const getAgeBy15ms = (errMsg) => { return createTimeoutPromise(15, () => 32, errMsg); }; const main = async() => { const lastName = await getLastNameBy50ms().catch(a => a); const firstName = await getFirstNameBy30ms("名前が取得できないエラー").catch(a => a); const age = await getAgeBy15ms().catch(a => a); console.log("lastName : " + lastName); console.log("firstName : " + firstName); console.log("age : " + age); }; main(); |
1 2 3 |
lastName : 田中 firstName : 名前が取得できないエラー age : 32 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
'use strict'; const errMsgTimeout = "タイムアウト失敗"; const createTimeoutPromise = (ms, callback, isErr = false) => { return new Promise((resolve, reject) => { if (isErr) { reject(errMsgTimeout); } setTimeout(() => { resolve(callback()); }, ms); }); }; const main = async() => { const ret1 = await createTimeoutPromise(10, _ => "10秒").catch(a => a); const ret2 = await createTimeoutPromise(100, _ => "100秒").catch(a => a); const ret3 = await createTimeoutPromise(30, _ => "30秒", true).catch(a => a); const ret4 = await createTimeoutPromise(20, _ => "20秒").catch(a => a); console.log(ret1); console.log(ret2); console.log(ret3); console.log(ret4); }; main(); |
1 2 3 4 |
10秒 100秒 タイムアウト失敗 20秒 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
const getLastName = () => { return new Promise((resolve, reject) => { resolve("田中"); reject("LastNameの取得に失敗しました"); }); } const getFirstName = () => { return new Promise((resolve, reject) => { reject("FirstNameの取得に失敗しました"); resolve("太郎"); }); } const getAge = () => { return new Promise((resolve, reject) => { resolve(23); reject("Ageの取得に失敗しました"); }); } const onlyReturn = args => args; const main = async() => { const lastName = await getLastName().catch(onlyReturn); const firstName = await getFirstName().catch(onlyReturn); const age = await getAge().catch(onlyReturn); console.log("lastName : " + lastName); console.log("firstName : " + firstName); console.log("age : " + age); }; main(); |
1 2 3 |
lastName : 田中 firstName : FirstNameの取得に失敗しました age : 23 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
'use strict'; const createTimeoutPromise = (ms, callback) => { return new Promise(resolve => { setTimeout(() => { const result = callback(); resolve(result); }, ms); }); }; const myFunc = async () => { console.log("start"); await createTimeoutPromise(30, () => '1個目。30ミリ秒タイムアウト').then(console.log); await createTimeoutPromise(20, () => '2個目。20ミリ秒タイムアウト').then(console.log); await createTimeoutPromise(10, () => '3個目。10ミリ秒タイムアウト').then(console.log); console.log("end"); }; myFunc(); |
1 2 3 4 5 |
start 1個目。30ミリ秒タイムアウト 2個目。20ミリ秒タイムアウト 3個目。10ミリ秒タイムアウト end |
考えれば考えるほどわからなくなってきて、どれも当てはまらないんじゃ、、!?とも思った
結局一番最初に書いたウミガメとタコにしたけど、答案集めたらみんな答え違った😂😂😂 pic.twitter.com/gRPyQddRuo— K@文系情報学部生(無言フォローすみません) (@beer_nomitaii) January 17, 2020
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
const トビウオ = { は海に住んでいる: true, は魚だ: true, には足がある: false, は鳥だ: false, }; const クワガタ = { は海に住んでいる: false, は魚だ: false, には足がある: true, は鳥だ: false, }; const コイ = { は海に住んでいる: false, は魚だ: true, には足がある: true, は鳥だ: false, }; const カラス = { は海に住んでいる: false, は魚だ: false, には足がある: true, は鳥だ: true, }; const イルカ = { は海に住んでいる: true, は魚だ: false, には足がある: false, は鳥だ: false, }; const ウミガメ = { は海に住んでいる: true, は魚だ: false, には足がある: true, は鳥だ: false, }; const タコ = { は海に住んでいる: true, は魚だ: false, には足がある: true, は鳥だ: false, }; const ヘビ = { は海に住んでいる: false, は魚だ: false, には足がある: false, は鳥だ: false, }; const f = x => ( (x.は海に住んでいる ^ !(x.は魚だ)) & (x.には足がある | x.は鳥だ) ); const xにあてはまるリスト = []; if (f(トビウオ)) xにあてはまるリスト.push("トビウオ"); if (f(クワガタ)) xにあてはまるリスト.push("クワガタ"); if (f(コイ)) xにあてはまるリスト.push("コイ"); if (f(カラス)) xにあてはまるリスト.push("カラス"); if (f(イルカ)) xにあてはまるリスト.push("イルカ"); if (f(ウミガメ)) xにあてはまるリスト.push("ウミガメ"); if (f(タコ)) xにあてはまるリスト.push("タコ"); if (f(ヘビ)) xにあてはまるリスト.push("ヘビ"); console.log("xにあてはまるリスト : " + xにあてはまるリスト); |
1 |
xにあてはまるリスト : クワガタ,カラス |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
const オリンピック = class { constructor(name){ this.name = name; } toString() { return `この艦はオリンピック級${this.name}号です`; } }; const ships = []; ships.push(new オリンピック("オリンピック")); ships.push(new オリンピック("タイタニック")); ships.push(new オリンピック("ブリタニック")); ships.forEach(ship => console.log('' + ship)); |
1 2 3 |
この艦はオリンピック級オリンピック号です この艦はオリンピック級タイタニック号です この艦はオリンピック級ブリタニック号です |