開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- Node.js, Safari(JavaScript エンジン)
- Learning JavaScript [邦訳](参考書籍)
メタプログラミングRuby 第2版(Paolo Perrotta (著)、角 征典 (翻訳)、オライリージャパン)の1部(メタプログラミング Ruby)、4章(水曜日: ブロック)、4.5(呼び出し可能オブジェクト)、4.5.1(Proc オブジェクト)、&修飾、HighLine の例を JavaScript で取り組んでみる。
HTML5
<pre id="output0"></pre> <button id="run0">run</button> <button id="clear0">clear</button> <script src="sample3.js"></script>
JavaScript
let btn0 = document.querySelector('#run0'), btn1 = document.querySelector('#clear0'), pre0 = document.querySelector('#output0'), p = (x) => pre0.textContent += x + '\n'; let Proc = (fn) => { let that = {}, call = (...args) => fn(...args); that.call = call; return that; }; let Lambda = (fn) => { let that = {}, call = (...args) => fn(...args); that.call = call; return that; }; let math = (a, b, fn) => fn(a, b), doMath = (a, b, operation) => math(a, b, operation); let myMethod = (theProc) => { return {call: (...args) => theProc(...args)}; }; let myMethod1 = (greeting, fn) => `${greeting}, ${fn()}!`; let HighLine = () => { let that = {}, ask = (n, msg, fn) => { p(msg); let inputs; if (n === 1) { inputs = 'Ivana, Roberto, Olaf'; } else if (n === 2) { inputs = 'Bill'; } return fn(inputs); }; that.ask = ask; return that; }; let output = () => { p('4.5.1 Proc オブジェクト'); let inc = Proc((x) => x + 1); p(inc.call(2)); let dec = Lambda((x) => x - 1); p(dec.call(2)); let proc = {call: (x) => x + 1}; p(proc.call(2)); p('&修飾'); p(doMath(2, 3, (x, y) => x * y)); let p0 = myMethod((name) => `Hello, ${name}!`); p(p0.call('Bill')); let myProc = () => 'Bill'; p(myMethod1('Hello', myProc)); p('HighLine の例'); let hl = HighLine(), friends = hl.ask(1, '友達を入力してください', (s) => s.split(',')); p(`友達一覧: ${friends}(Array.isArray: ${Array.isArray(friends)})`); let name = hl.ask(2, '名前は?', (s) => s[0].toUpperCase() + s.substring(1).toLowerCase()); p(`Hello, ${name}`); }; btn0.onclick = output; btn1.onclick = () => pre0.textContent = ''; output();
0 コメント:
コメントを投稿