リーダブルBOTのすゝめ

リーダブルBOTのすゝめ

kapipara180です。

はじめに

リーダブルコード」を読了しました。ソースコードを公開することもあるし、何週間か何か月前に作っていたソースコードを掘り起こして再開発することもあるし、そもそもコーディングそのものの勉強ってしたことないしということで、以前からコーディングそのもののスキルアップをしたいと思っていたんですよ。本書は非常にとっつきやすく、かつ実用性が高いので私のような亜流コーダーにはうってつけでした。
※言語に依存しない本になっているため、メッセージ自体は抽象的なのですが、具体例としてソースコードも載っています。(主にjavascript, C++)超読みやすいです

題名の通り、一貫して読みやすい、美しいコードを書くためにはどうすればよいかが書かれています。備忘がてらいいなーと思った箇所をメモしておきます。

 

活かす学び

絶対に意識して活かすぞ!そしてゆくゆくは当たり前にやるぞ!と思った内容。
以下太字が本書抜粋。その他コメント。

  • 明確な単語を選ぶ。 なんでも間でもGetにしてしまいがち、Get以外にもDownloadとかFindとかFetchとかある。
  • 大文字やアンダースコアなどに意味を含める。一応関数の名前を大文字にするぐらいはしていたが、クラスのメンバー変数とローカル変数の命名規則とかはなかったので、最後に「_」をつけるとかやりたい。
  • 似ているコードは似ているように見せる。最近これは大事だと思うようになってきた。同じ関数を読んでいるのに引数の長さが違うせいで折り返しが起こったりすると、書いているときは「まあね。」と思ってスルーしてしまうけど、何度も見ていると脳が疲弊する。きれいにすると脳の摩擦が少なくなる。
  • コードを段落に分割する。同上。チャンキングするだけで脳にすっと入るようになる。なんとなくコメントは一息ぐらいの長さにする癖があったけど、本書を読んで必要十分量であれば、何行でも書いてよいと思った。本書の視覚領域に対する情報量を増やす(みたいな)という考え方は非常に刺激的。
  • 優れたコード>ひどいコード+優れたコメント。
  • コードの意図を書く。コメントは説明書みたいな文章になりがち。でも後で見返したり、他人が見たときにわかりやすいのは、ソースを見ればなんとなくわかる仕様ではなく、その底流に流れる思想。目的の方。
  • 制御フロー変数を削除する。xxx_flagみたいなやつ。どこで使われるかわからないbooleanが出てきたら脳のメモリを消費して覚えておかないといけなくなる。工夫してこういう制御フロー変数を使わなくていいようにする。
  • 変数のスコープを縮める。このアイデアは非常に気に入った。確かにコードを読むときに、どこでどのように使われるかもわからない変数が山ほど出てくるのは脳みそに悪い。できるだけ変数のスコープを絞って、脳のメモリを解放してやった方がいい。pythonは定数(const, final..)を定義できないのが残念だが、変更しない変数には_constとかをつけて覚えておかないでいいようにしとけばいいと思った。

 

活かしたい学び

活かしたいぞ!でも難しそうだから徐々にね!と思った内容。

  • より優雅な手法を見つける。複雑なコードを読みやすく変更する際に、解法そのものを変更する方法。逆から考えてみたり、まったく違う視点で問題を解いたりする。
  • 無関係の下位問題を抽出する。この考え方も非常に刺激的。関数に外だしするものと、コードの中に記述するものをどう分けるかという一つの指針。コードが実行したい「高レベルの目標」を文書化し、これと直接関係のない処理を外に出すという考え方だ。best bidとbest askを取得するという高レベルの目標に対して、取引所をコールする際のちょっとしたエラーハンドリングなどは無関係の下位問題に他ならない。積極的に外だしすべき。
  • ただし、新しい関数をコードに追加すると、ごくわずかに(でも確実に)読みにくさのコストが発生する。ことには注意が必要。
  • 解決策を言葉で説明する。コードがやっている内容を簡単な言葉に落としてみる。落としたうえで、もっと読みやすく、簡単な処理方法がないか考える。
  • 身近なライブラリに親しむ。既存のライブラリで結構な量の問題が解決できるというアイデア。著者のすゝめは標準ライブラリのすべての関数・モジュール・型の名前を15分かけて読んでみること。15分で読めるかはさておき、やってみる価値は大いにあると思う。(まだやったことない)

BOTコーディングでやろうと思ったこと

どれも当たり前のようなんだけど、結構できてない。本の中ではNGのコードを解説付きでよいコードに変更していくという流れなので、実用性が高い。読んだことがない人はぜひ読んでみてほしい。もう一回貼っておこう。「リーダブルコード

さて、本書を読んでBOTをどう改造しようかという話である。

  • 基本的なテクニックはもちろんすべて適用する。
  • メインソースは条件を確認し、条件を満たしたら注文するということが高レベルの目標であるので、これ以外の無関係の下位問題をすべて外出ししてみたい。取引所とのIFの部分が個別の関数になると思う。そして、取引所の関数を読んで条件を満たすかどうかを判定し、判定結果だけがメインソースに返っていくイメージ。
  • こうすると、取引所が変わっても、APIが改修されても、最小限の変更だけで同様の処理ができる。(ccxtじゃんという気もするが、ccxtはccxtで使いにくいので…)
  • Utilライブラリを作る。結構どんなプログラムでも使う処理って多い。陳腐な例だと引数のStringを全部” “で結合してprint出力する。みたいな。

こんな感じでリーダブルなBOTを作ってみようと思う。
いつの日か誰かの目に触れて、その誰かが時代を一歩先に進めるかもしれないんだし、みんなでリーダブルなBOT作ろうよ!ということで、リーダブルBOTのすゝめでした。

以上。

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です