1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

おさらい

Flutterの用語やフォルダ構成など、Flutter生活をエンジョイするための知識を少しだけ身につけました。
しかしこのふんわり感ではまだまだ検証に入ることができません!!
今日はひとまずDartという言語を知ってみたいと思います。

題材

もちろんズンドコキヨシです。

ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了

(ズンドコキヨシまとめ)

やってみた

こんな感じです。
処理の内容は特に解説する必要とかないですね!完成!

ZunDokoKiyoshi.dart
import 'dart:math';

main(List<String> args) {

  List<String> zunDokoStack = new List<String>();

  final rand = new Random();
  while(zunDokoStack.join() != "ズンズンズンズンドコ") {
    String value = "";
    if (rand.nextInt(2) == 0) {
      value = "ズン";
    } else {
      value = "ドコ";
    }

    zunDokoStack.add(value);

    if (zunDokoStack.length > 5) {
      zunDokoStack.removeAt(0);
    }
    print(value);
  }
  print("キ・ヨ・シ!");
}

もっとやってみた

ここで終わってはつまらないですよね。
色々なパーツに分けてみましょう!

まずは「ズン」と「ドコ」をenumで定義してみます。

ZunDokoKiyoshi.dart
enum ZunDoko {
  Zun,
  Doko
}

Dartのenumはとても機能が乏しく、文字列を定義して返すことができないようです。
しかも、Classのinnerに定義することができません。

仕方がないので、enumをいい感じにしてくれるHelperクラスを作ってみました。
これでenumを好きな文字列にできます。(みなさんこの辺はどうやってるんですかね?詳しい人教えてください。)

ZunDokoKiyoshi.dart
class ZundokoHelper {
  static String getStringValue(ZunDoko zundoko) {
    switch(zundoko) {
      case ZunDoko.Zun:
        return "ズン";
      case ZunDoko.Doko:
        return "ドコ";
    }
  }
}

次はベタが記されている色々な処理をClassを用意して突っ込んでいきます。
Viewで業務ロジックしたくないですしね!

ZunDokoKiyoshi.dart
class ZunDokoKiyoshiModel {

  String getRandomZundokoString() {
    final rand = new Random();
    return ZundokoHelper.getStringValue(ZunDoko.values[rand.nextInt(ZunDoko.values.length)]);
  }

  String successMessage() {
    return "キ・ヨ・シ!";
  }

  bool isZunDokoKiyoshi(List<String> stack) {
    return stack.join() == expectedZunDokoKiyoshi().join();
  }

  List<String> expectedZunDokoKiyoshi() {
    List<String> expected = List<String>();
    expected.add(ZundokoHelper.getStringValue(ZunDoko.Zun));
    expected.add(ZundokoHelper.getStringValue(ZunDoko.Zun));
    expected.add(ZundokoHelper.getStringValue(ZunDoko.Zun));
    expected.add(ZundokoHelper.getStringValue(ZunDoko.Zun));
    expected.add(ZundokoHelper.getStringValue(ZunDoko.Doko));
    return expected;
  }
}

main処理を書き換えれば完成!
かなりそれっぽくなりました!

ZunDokoKiyoshi.dart
import 'dart:math';

main(List<String> args) {

  ZunDokoKiyoshiModel zunDokoKiyoshi = ZunDokoKiyoshiModel();

  List<String> zunDokoStack = new List<String>();

  while(!zunDokoKiyoshi.isZunDokoKiyoshi(zunDokoStack)) {
    String value = zunDokoKiyoshi.getRandomZundokoString();
    zunDokoStack.add(value);
    if (zunDokoStack.length > zunDokoKiyoshi.expectedZunDokoKiyoshi().length) {
      zunDokoStack.removeAt(0);
    }
    print(value);
  }
  print(zunDokoKiyoshi.successMessage());
}

全体的にJavaの書き方によく似ていますし、かといって古すぎずに良いですね!
Flutterが流行る理由がわかった気がします!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?