Clojure

REPLでのプログラミング:REPL支援開発のガイドライン

Clojure REPLは、言語の学習からデータ探索、ライブ音楽パフォーマンスまで、幅広い目的に使用されます。本章では、Clojure REPLを、より一般的なユースケースである実用的なソフトウェア開発に適用するための指針となる原則をいくつか紹介します。

REPLはプログラムへのユーザーインターフェースです

プログラムは一般的に、さまざまなメディアを介してユーザーインターフェースを提供します

  • グラフィカル:Webページ、モバイルアプリ、デスクトップアプリ

  • ネットワークベース:Webサービス/ HTTP API /…

  • ストレージベース:プログラムはデータベースを最新の状態に保ち、クエリを実行できます

  • コマンドラインインターフェース(CLI):端末を介したインタラクションから

REPLは、ユーザーとプログラムのインタラクションのためのもう1つの媒体と考える必要があります。上記の媒体と比較して、高度な知識(Clojureでのプログラミング!)が必要ですが、コードのどの部分をユーザーが活用したいかをほとんど予測する必要がないため、非常に表現力豊かで開発コストも低くなります。たとえば、REPLは、*アドホック*なデータエクスポートに非常に適したUIです。

Clojureプロジェクトでは、REPLインタラクション専用に関数と名前空間を定義するのが一般的です。CLI、ダッシュボードなどの代替手段と考えてください。

REPLに夢中になりすぎないでください

REPLは大きな速度をもたらすことができますが、動きを kemajuan と間違えないでください。**_常に計画を持ってREPLに取り組む_**必要があります。そうでないと、REPLは集中力よりも注意散漫をもたらします。REPLを使用している間、計画を頭の中に留めておくのが難しい場合は、**_書き留めることを検討してください_**。

REPLは、非常に段階的な変更のみを案内します。これは、「局所的最大値」に陥りやすいです。より戦略的な思考が必要な場合は、一歩下がってください。特に、**_迅速なフィードバックは、ソフトウェア設計と体系的な問題解決の代わりにはなりません。_**

作業内容を保存し、アクセスできるようにすることを忘れないでください

REPLは非常に一時的で排他的な媒体です。REPLセッションから持ち帰るものがある場合は、おそらく欠陥のある人間の記憶以外の場所に存在するはずです(たとえば、コード、テスト、コメントアウトされたコード、ドキュメント、データファイルなど)。

REPLで学んだことがプロジェクトの前提条件である場合は、他の貢献者(数か月後の自分自身を含む)がアクセスできるようにするための追加作業を行う必要があります。

REPLはインタラクティブ開発のための唯一のツールではありません

プログラミング中にタイトなフィードバックループを提供する他のツールがあります

  • 自動リロードテストスイート(例:Midje

  • 静的コード解析ツール(リンター、静的型チェッカー)

  • ホットコードリロード(例:Figwheel

  • 「ビジュアル」テストスイート(例:Devcards

これらのアプローチをREPL支援開発と「競合する」と見なす理由はありません。多くの場合、REPLはそれらを使用する際に役立ちます。これらの各アプローチには長所と短所があります。たとえば、REPLはプログラムの実行を非常に明確にしますが、破損を検出するためのツールとしては貧弱です。