ヌンタコのプログラミング学習ブログ

フィヨルドブートキャンプ37期生

wcコマンド わかりかけたのに終わりが見えない・・・( ; ; )

長すぎるんですがー

なんで終わりが見えない?課題点

課題点

  • 標準入力かファイル指定かというのを一つの変数で扱うと処理がコンパクトにできない?
  • データ格納の変数をどちらも一つで行うと、ファイル内容を読むかどうかで分岐できない
  • 変数の中身をそれぞれで区別したい
  • 出力部分を一つに管理

設計がよろしくない?と思われるので、ロジック図でまた整理するところからするしかないかな。 PRのコメント指摘内容がわかったと思ったら、かなり設計し直しと言う感じで結構きつい。

放置してた期間も長いだけにwcコマンドは2ヶ月くらいかかってしまってる。 きつー

元設計

wcコマンド冒頭の設定

require 'optparse'

options = ARGV.getopts('l')

input_contents = (!ARGF.argv.count.zero? ? ARGF.argv : $stdin.read)
file_information = []
total = [0, 0, 0, 'total']

標準入力の際は、文字列で引っ張ってくると処理しにくいので切り分けて改行をとって、 配列にしてから、改行数、単語数、バイト数を処理している。

ただ、上記でもあるように - 標準入力 => 文字列としてファイル内部は参照せずに集計 - ファイル名指定 => ファイルの中身を集計

という動作が異なるのでどう処理を切り分けて重複箇所を防ぐかが設計なんでしょうが、うーんってなってる。

どうすればいいか?

  • ARGF.argv$stdin.read を使うとクラス分けできる
  • File.read()を使う場合とそうでない場合を作る

ifの指定がうまく効いてないところがちょいちょいあるんだよなあ。

input_contentsの中身の条件分け格納は設計途中でメソッド呼び出しを、と思ってる。

あとは.classof_kind?()使って分岐させることも必要かなと。

ちょっと具体的な設計までまだ掴めない。

感想:めげそう

一言で言うならめげそう・・・昨日から3時間程度の学習時間ですね。 リファクタリングして冗長的表現や重複箇所を削って最適化する作業、は設計を一から組むこともあるんだなーと当たり前ながら本当気が遠くなる。 慣れたら=経験重ねたらできるところもあるでしょうが、ないからね。

やっぱり逆引きできないのは不便だなー逆引きできたらどんなに良いことか・・・

と思ったらやっぱりあった。 ただレビューが★4切ってると「うん?」ってなる。

レビュー読んで「うんうん」ってなった。 わかっている人が書く文章とわかってない人が苦労してわかる人になった時の内容のわかりやすさって違いますよね。 ってことを指摘してるのかな。

問題の解法や途中式でところどころショートカットしているようなイメージの書籍なのかな。 考えて読め、そしてこの一冊で全網羅じゃなくてネット検索と複合的に使いなさいよ。的な一冊なのかな。

そしてまさかのこんな本見つけた!

フィヨルド卒業したらやってみたい気もする。(気が遠くなるからここは「へ〜面白い」程度で留めよう)

奥が深いこと学習するときは狭く深くやらないとあれもこれもで進まなくなってしまうので注意ですよね。

今後の日報こうしたいよね案(自分用)

日報がここでも書いてフィヨルド内でも書いてってするのが正直面倒になってきたので、

  1. ここで内容を書いて
  2. フィヨルドの日報にははてぶの記事をリンクとして貼る
  3. 日報には見出し・はてぶリンク・学習時間を記載

こうしようかな。

転記が二度手間なので・・・

とりあえず今日もお疲れ🏖