※2024/03/06 この記事は移動しました。
思い通りに動かないときの対処方法
エラーが出てないけど、思っているのとはちがう結果が出るときの対処を書いてみた。
##思ったとおりに動いている最前線はどこか?
思ったとおりに動いている最前線を探す。
例えば、足し算アプリを作るとして、結果が正しく帰ってこない時は、
入力値のフォーマットは正しいか?
入力値は処理にわたされているか?
処理はきちんと動作しているか?
出力時に結果を出力するようになっているか?
このあたりを確認して、
処理までは正しい、ということがわかれば、
あとは出力部分を確認していくだけ。
##入力・処理・出力のどこに問題があるか切り分ける。
プログラムの基本は入力・処理・出力なので、ここをベースに考える。
コードを読むときもこれを意識すると便利。
入力場所はただしいか?
入力値がまちがっているのか?
入力されたデータは処理に届いているか?
処理はきちんと動作しているか?
出力先が書かれているか?
出力するタイミングは正しいか?
##putsやprintを使ってコンソールに結果を表示してみる。
putsの場所を色々と変えてみて、どこまではうまく行っているのか探る。
##ステップ実行できるなら、ステップ実行をしてみる。
ステップ実行をしながら値を確認してみる。
実行の順序が想定どおりになっているか流れを追ってみる。
##出力箇所の値を計算結果ではなくて、固定の値にしてみる。
出力箇所の値をなにか固定の値にしてみる。
設定した固定の値が出力されるならば、出力以前の部分に問題がある可能性が高い。
設定した固定の値が出力されなければ、別の箇所の値が出力されている可能性が高い。
##親は正しく動いているか確認する。
そもそも、元になっているクラスのメソッドが正しくうごいているか確認してみる。
##出力がまとめられていないか確認する。
for文の中で出力処理を書いていたりする場合、
プログラムの構成によっては最後の結果だけ出力されていたりする。
5回ループさせて、5行の結果がほしいのに、5回目の結果しかでない、
そういうこともある。
##最小限度の構成で正しく動くものを作ってみる or サンプルを見てみる。
計算処理や値の受け渡しをひとまず無視して、
イベントが起きたら値が表示される、
という感じの最小限度の構成で正しく動くものを作ってみる。
動かないものと比較したり、
最小限度のものに肉付けしていったりしてみる。
あるいはサンプルを見つけて動かしてみる。
いきなり正解に行くのではなく、小さく初めてみる。
##単純なミスがないか確認してみる。
変数のスペルミスはないか?
変数のスコープはまちがってないか?
書式の間違いはないか?日付や時間の区切り文字、小数点まで表示、など。
必要な所をコメントアウトしてないか?
if文やfor文、メソッドの終了箇所を間違ってないか?
##環境設定に間違いが無いか確認する。
環境設定に誤りはないか?
DBのスキーマ名はあっている?ホストは?などなど。
「まさかここじゃないよな」というところに、問題があったりする。
思い込みは敵。
##記載場所を変えてみる。
実行順序に問題がある可能性がある。
AのあとにBが実行されるつもりで書いていたのに、
実はAのあとにDが実行されていたりすることもある。
問題箇所を見つけるためにも、
コードを書いてある場所を変えて試してみる。
##とにかくいじってみる。
gitやフォルダコピーでもなんでもいいので、バックアップをとっておいて、
とにかくいじって、実行してみる。
##ググってみる。
たとえばRailsのGreapを使っていて、かつ初心者なら
[rails greap api サンプル]
[rails greap api 入門]
[rails greap api はじめて]
等で探してみる。
あるいは、ITに特化したサイトで探してみる。
Qiitaとかhatenaとか。
##質問してみる。
周りに人がいれば聞いてみる。
掲示板とかも利用してみる。
[https://teratail.com/]
ただし、セキュリティには十分注意すること。
##お茶にする。
いったんプログラムの事を忘れて美味しいコーヒーでも淹れてみる。
散歩してみる。
帰る。
お風呂に入る。
寝る。
なんでもいいから、いったん離れてみる。
いったん離れてみると、視野が広がってアイデアが出てきたりする。
##とにかく思い込みから離れる
思い込みの魔法に掛かっていることを意識すること。
大体、気がつくとなんでもないミスだったりする。
##ここに書いてある内容を忘れること。
ここに書いたのはひとつの方法論でしか無い。
未来永劫使えるわけでも、誰にでも、いつでも当てはまるわけではない。
なので、必要な部分だけ持っていくこと。
あとは、さっさと忘れてしまうこと。