開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- JavaScript (プログラミング言語)
- Safari(Web browser)
Eloquent JavaScript(Marijn Haverbeke 著、No Starch Press)のPart 1(Language)、Chapter 8(Bugs and Error Handling)、Exercises(Retry, The Locked Box)を取り組んでみる。
Exercises(Retry, The Locked Box)
コード(Emacs)
JavaScript
(() => { 'use strict'; var box, nums = [1,2,3,4,5], primitiveMultiply, retry, withBoxUnlocked, func; primitiveMultiply = (x, y) => { if (Math.random() < 0.5) { return x * y; } throw { name: 'primitiveMultiplyError', message: 'MultiplicatorUnitFilure', }; }; retry = (x, y) => { try { return primitiveMultiply(x, y); } catch (e) { return retry(x, y); } }; nums.forEach( (x) => nums.forEach( (y) => console.log(`${x} x ${y} = ${retry(x, y)}`))) box = { locked: true, unlock: () => this.locked = false, lock: () => this.locked = true, _content: [], get content() { if (this.locked) { throw new Error('Locked!'); } return this._content; } }; withBoxUnlocked = (func) => { try { box.unlock(); func(); } catch (e) { console.log(e.name, e.message); } finally { box.lock(); } }; func = () => { throw { name: 'Error', message: 'message' }; }; console.log('locked', box.locked) withBoxUnlocked(func); console.log('locked', box.locked) box.lock(); console.log('locked', box.locked) withBoxUnlocked(func); console.log('locked', box.locked) })();
入出力結果(Terminal, Node.js)
$ node sample1.js 1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 1 x 4 = 4 1 x 5 = 5 2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10 3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15 4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16 4 x 5 = 20 5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25 locked true Error message locked true locked true Error message locked true $
0 コメント:
コメントを投稿