LoginSignup
2
0

More than 1 year has passed since last update.

この記事は、 @jnchitoさんのアドベントカレンダーのRubyプログラミング問題にチャレンジ!の12月5日の担当分です。
詳しいレギュレーションは、問題のGitHubのURLを参照してください。
PRのURL

ロジックの解説

用語

名前 英語 説明
マス square 点字の中の一つの点
点字 Tenji マスが一つの組み合わせになったもの 点字の組み合わせで文字に対応している
マーク mark 点字を組み合わせた単語(文字列)

スクリーンショット 2021-11-24 14.14.19.png

点字のルール

点字は、縦3点、横2点の6点の組み合わせで作られています。そして、この単位をマスと言います。
下の図をみてください。この図の①②④の点を組み合わせて母音を表し③⑤⑥の点を組み合わせて子音を表します。

引用元 全視情協

クラス説明

TenjiMaker

今回の問題のmain関数である、TenjiMaker.to_tenji(text)を定義しています。
可読性を高くするために抽象度が高く理解容易性が高くなるようにしています。
自分は点字を一文字単位で扱っているため点字が複数ある、TenjisMakerとしたほうが自然だと思いますが、問題のルール上単数形のTenjiMakerになっています

Tenji

クラスの説明

点字を表しているクラスです。
このクラスは表示する文字列 "○" とかと関係性をもっていないので、
例えば出力をコンソール(CLI)ではなくて、ブラウザ(HTML)に変更する仕様追加が発生した場合も柔軟に対応できると思います。

や行について

や行は特殊なルールがありますが、そのルールはや行だけなのでロジックを実装するとわかりづらくなったり、バグが発生する可能性があるためハードコーディングをしています。

MarkBuilder

渡された点字をもとに表示するマークを生成します。
このクラスはマークを生成することに特化しているクラスなので、状態を持たないイミュータブルなクラスにしています。
(Railsでいうサービスクラスです)

テストのメソッド名について

自分は英語が苦手なのと、このコードを見る人の殆どは日本人だと思います。
そのため、テストのメソッド名については日本語で補足を書いています。

コードのアピールポイント

  • 頑張ったところ
    • マーク(コマンドで表示する文字列)を生成する部分が点字を複数組み合わせて行の文字列を生成するので、直感的な仕様ではないです
    • そのため実装するのが少しだけ大変でした
  • 苦労したところ
    • MiniTestをはじめて扱うのでキャッチアップやRspecとの書き方の違いが少しだけわかりづらかったことが苦労しました
  • 工夫したところ
    • コードとこのドキュメントがあれば、点字について理解できるように意識しました
  • 自慢したいところ
    • 拡張性もあると思うのでもし今後、複雑な点字のルールを実装することになっても実装しやすいのではないかと思います
    • 点字についてわからないエンジニアでもコードを理解しやすいのではないかと思います
      • 点字のルールはTenjiクラスをみればわかると思います
      • 表示する文字列(マーク)についてはMarkBuilderをみればわかると思います

伊藤さんにメッセージ

  • 点字については全くの知識がなかったのですが、今回の実装した範囲内であれば説明できるようになったので、少しだけ点字が身近に感じました
  • 著名な方にレビューをしてもらうのはじめてですので緊張していますw
2
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
2
0