2013年11月7日木曜日

開発環境

『初めてのJavaScript 第2版』(シェリー・パワーズ著(Shelley Powers著)、武舎 広幸+武舎 るみ訳、オライリージャパン、2009年、ISBN978-4-87311-425-5) の5章(関数)、練習問第5-1、5-2をDartで解いてみる。

その他参考書籍

練習問第5-1、5-2

コード

sample.dart

import 'dart:html';

void main(){
  var run = querySelector('#run'),
      clear = querySelector('#clear'),
      pre0 = querySelector('#pre0'),
      t0 = querySelector('#t0'),
      t1 = querySelector('#t1');
  run.onClick.listen((MouseEvent event){
    var result = window.navigator.userAgent + '\n',
        n = int.parse(t0.value),
        m =  new List.generate(n, (int index) => index + 1).fold(
            1, (prev, element) => prev * element),
        nums = t1.value.split(',').map((e) => int.parse(e)),
        wagos = convertNumberToWago(nums);
    result += '再帰: $n! = ${calcFactorialRecursively(n)}\n' +
        'for loop: $n! = ${calcFactorialWithLoop(n)}\n' +
        'fold: $n! = ${m}\n' +
        '和語: $wagos';
    pre0.text = result;
  });
  clear.onClick.listen((MouseEvent event) => pre0.text = '');
}

int calcFactorialRecursively(int n){
  if (n < 0){
    throw 'エラー';
  }
  if (n <= 1){
    return 1;
  }
  return n * calcFactorialRecursively(n -1);
}

int calcFactorialWithLoop(int n){
  if (n < 0){
    throw 'エラー';
  }
  var result = 1;
  for(var i = 2; i < n; i+= 1){
    result *= i;
  }
  return result;
}

List<String> convertNumberToWago(Iterable<int> nums){
  List<String> result = [];
  for(var n in nums){
    switch (n) {
      case 0:
        result.add('れい');
        break;
      case 1:
        result.add('ひとつ');
        break;
      case 2:
        result.add('ふたつ');
        break;
      case 3:
        result.add('みっつ');
        break;
      case 4:
        result.add('よっつ');
        break;
      case 5:
        result.add('いつつ');
        break;
      case 6:
        result.add('むっつ');
        break;
      case 7:
        result.add('ななつ');
        break;
      case 8:
        result.add('やっつ');
        break;
      case 9:
        result.add('ここのつ');
        break;
      default:
        result.add('?');
    }
  }
  return result;
}















						

0 コメント:

コメントを投稿