フラグのことをよく忘れます。
以前 If文のお化け,と表現した時にthomさんにいろいろと教わったのに,すっかり忘れて実際の仕事で使っているものでIf文だらけになっています。
Do Loop を多用するんですが,そうそうExit Doで抜けるわけにもいかないことが多い。
実務はやはりいろいろ条件が多く,モデル化したものより複雑で,しかも時間制限が激しい。
会議と並行して会議進行にかかわるデータ処理をしつつ,必要な資料のためにコーディングもしているという,けっこうひどい状況です。
まともに時間をかけれない場合はもうコードをコピペして,必要な部分だけ変えたりすることもあります。
まず,きちんと結果を出すことが最優先。中身の最適化の優先度はけっこう低い。
でも,次年度に向けて改善はしないといけません。
他人にバトンタッチするためでもありますし,自分がデバッグするときのためでもあります。
人は忘れるというのが大前提なので,問題だと感じたものは問題だと感じているときに修正して,修正したものを次年度に持ち越さないとイケナイデス。
さて,If文だらけになるケースっていうのは,複数の条件を同時に満たしたらこの処理,みたいな話をするときです。
ほとんどの業務ってそれなんですよね。Select Case文やSwitch関数ではどうにもならない時。
加えて,とにかく解決を急ぎつつ確認して確からしいと判断して,やっとデータを出力して会議のメンバーに確認,検証を頼む,という流れになるので,
その時作っているものは条件もめちゃめちゃ。とにかく望む結果がでればいいというやつです。
でも,知らない人や1年後の自分にはなんでこんな書き方してるんだ??となります。。
やはりシンプルに,できるだけ肯定的に条件を書きたい。裏を使うような条件はできれば避けたい。
そういうときに役に立つのは フラグ です。でも,私定期的にフラグを使うという考え方が抜け落ちます。困ったものです。
今日もお風呂に入ってのんびり仕事で使ったコードのことを考えてたらなんでフラグで処理しなかったんだと がっかりしました。
11月くらいから予想しつつ,助言をもらいつつ取り組んできたので,今のところやれてますがまだ終わってません。。(;´▽`A``
内容のイメージとしては,
人を対象として,評価していく。
検査方式が A,B,C あって,
さらにAには8種類の評価基準があり,Bには2種類の評価基準があります。CはBと近い評価基準を使いますが1種類。
A,B,Cそれぞれ似通ったレポート,審議資料,集計を行う必要があります。
書式は与えられたものを使うので,基本的にはセルの位置等は与えられた書式に依存します。でも書式を提供する側には,処理する側の気持ちは入っていないため,微妙にセルの座標等はずれています。Wordの書式だったりExcelの書式だったりいろいろです。
それぞれの審査基準を通ったものは,1~4組,しかも男女で分けていかないといけません。
わたしがここしばらく取り組んでいる仕事ってのはこんな感じのものです。そして,データの項目はそれぞれに対し100はいかない感じです。だいたい80くらいのことが多い。
3つの方式を合わせると数百行のデータです。
こんな話なので,つい
If 方式=A And 評価基準=① then
・・・・
If 組=1 then
どうのこうの
Elseif 方式=A And 評価基準=② then
・・・・
みたいな感じで書いていきます。相手が文字列だけなら連結してまとめて評価という方法も考えますが,値と不等号で処理したりとかもしますしね,ほんと いろいろ いろいろあるんです。
で,条件の間間にその時すべき処理を書くので大パニックです。
でも,大事な視点は 最終的な処理はほんの4種類くらいしかなかったりします。
それなのに途中の条件が複雑なのに負けて,上のような表記をして,自分からどんどん罠にはまっていきます。
コマッタモノデス。
まぁIf文は使ってはいいとは思うけど処理が4つくらいしか無いなら long型のフラグとか用意して1~4のどれに該当するかを記述していって,
最後にフラグの値で処理を分ければ終わる話ですよね。
条件分岐と処理をきちんと分けれますし,ずいぶんシンプルに見やすく書けるはず。
うんきっとできそうだ。。
もう寝ないといけないので,書きたい放題 とりとめのない話で終わりますが,
明日はきちんとコードの整理をして,頭の中をまとめたいと思います。
thomさんに教えてもらった記事。
この時期にいろいろデータ処理を習っててよかったなぁとしみじみ思います。
ですが,多重ネストを回避するということは・・実務と同時並行はできませんでしたが,後から振り返ってきちんとやることでまた学ぼう。
毎年ある仕事内容に関することなので,終わった後に整理したことは,きっと次年度に生きる(ΦωΦ)