質問

私はしばらくの間Clojureを使用していますが、おもちゃよりも大きくて複雑なプロジェクトを作成したいと考えています。私は過去数年間Javaを使用してきましたが、IDEが私に何をするかということに慣れてきました。多くのクラスをコンパイルし、jarにパッケージ化し、ユーザーが起動するバッチファイルを作成します。

Clojureでの開発の例を見ると、それらはREPLへのロードファイルのラインに沿っているように見えます。どこでも生成されるクラスまたはjarを否定します。スチュアートハロウェイの素晴らしい「プログラミングクロージュア」ではたとえば、":gen-class"の例は1つも見つかりませんでした。私が使用したClojure IDE(ClojureBoxとenclojure NetBeansプラグイン)は、同じワークフローを促進するようです。

これは意図的なものですか?ツールが未熟すぎるのか、それとも「取得」しないのですか?

可能であれば、通常のユーザー(他の開発者ではない)が使用する非自明なプログラムを作成した人々から、いくつかのワークフローの例を聞きたいです。

ご意見をお寄せいただきありがとうございます。

役に立ちましたか?

解決

ここには本当に2つの質問があると思います:

A)展開方法(および依存関係の構築と管理)。私が言えることは、同様の目標/ドメインを持つ他のプロジェクトを見て、それらをコピーすることだけです。

B)ワークフロー:

私のワークフローは次のようなものです:

  1. ファイルを開いて、高レベルの希望的観測宣言を記述します

  2. それをサポートするいくつかの関数の作成を開始

2.5作成時に関数定義をREPLにコピーします

  1. 別のファイルを開き、関数の動作を確認するためのいくつかの基本的なテストを作成します

3.5これらをREPLにコピー

  1. 2つのバッファーを繰り返して、例までのテストと最終目標に向けたプログラムを構築します。これらは最終的に同様のアクティビティになり、私は完了したことがわかります。

  2. セカンダリファイルをdeftestでラップ

1か月後に戻ってくると、テストを実行して幸せになります! REPLバッファを保存すると、少しの労力で価値がもたらされます。それは現在のところ私にとってうまくいくものであり、より良いアプローチについて教育を受けることができてうれしいです。

IDEとREPLの選択について-ほとんどのIDEにはREPLがあるプラグインがあるため、どちらを選択するかわかりません-実際にどのテキストエディターで生産性を高め、どのように管理したいかプロジェクト構造。あらかじめ作られたAFAIKを構築する「この方法で行う」構造はないため、この時点で特定のプロジェクト(Clojure自体、半影、compojure、またはメインサイトにリストされているライブラリなど)を簡単に見ることができます。

他のヒント

REPL開発アプローチは、ほとんどのLISPファミリー(およびその他の機能言語)IDEによって長い間奨励されてきました。これらのREPLの一部には、Java IDEに関連付けることができるオートコンプリート機能もあります。

REPLを使用すると、標準的なアプローチよりもいくつかの大きな利点が得られます。 1つは、プログラムの実行中に任意のコードを実行できることです。これにより、マルチスレッドシステムのデバッグがはるかに簡単になります。第二に、さらに重要なことは、コーディング中に関数を簡単にテストできることです。新しい関数やクラスを中心にフレームワークを構築する必要はありません。REPLで直接操作して、さまざまなユースケースにどのように反応するかを確認できます。

さて、まず最初に、エディターまたはIDEの開発プラグインは事実上、IDE内からClojure REPLを使用する方法を提供します。おそらく、テストなどのためにREPLにファイルをロードすることさえできます。どちらかを選択する必要はありません。

Enclojureは大きな進歩を遂げています。それは確かです。しかし、私を含め、ほとんどの人はEmacsの使用に完全に満足しています。 Emacsは設定言語としてLispを使用するため、通常Lisperにとって最も自然な選択です。

REPLを持つ言語では、開発プロセスの主要部分としてREPLを使用するのが一般的です。ファイルを編集し、REPLにロードし、ファイルを再生して、作業の有無、すすぎ、繰り返しを確認します。これは、ClojureやHaskell、CLなどのREPLを使用する言語の大きな利点の1つです。

jarの作成、およびClojureのコードやもののコンパイルに関しては、それは簡単です。ほしくない場合、ほとんどの場合、Clojureコードをコンパイルすることはほとんどありません。行うときは、AOTをgen-classでコンパイルします。これにより、クラスファイルにコンパイルされ、jarに入れることができます。たくさんの例があり、チュートリアルもインターウェブに広がっています。最も簡単で効率的な方法は、Antなどを使用し、Clojureコードをコンパイルして.jarを生成するビルドスクリプトを作成することです。初めてやったとき、それは難しいと思っていましたが、実際にはとても簡単でした。 ClojureおよびClojure-Contrib Antビルドファイルを見て、必要な他のすべてのAntヘルプページを参照しました。

私が言及しなければならないことの1つは、Enclojure / does /が実際に実行可能な.jarファイルをビルドするということです。あなたが慣れているより高度なものが将来追加されると確信しています。実際、まだかなり新しいものです。

私は両方を使用します-Eclipse IDEとREPLを提供するCounterclockwiseプラグイン。 Clojureと一緒にJavaコードを開発する場合(これは私がそうであるように)、これは特に素晴らしい組み合わせです。

私の一般的なアプローチ:

  • エディターでClojureコードを書く
  • テストのためにREPLを開いたままにします(ここではCtrl + Enterが便利なショートカットです。REPLのエディターで選択されたコードを実行します)
  • プロジェクト管理、構築、テスト、SCMなどに汎用IDEツールを使用します

時々、私は純粋にREPLでも働いています。これは通常、物事をすばやくテストするのに適しています。テストコードが特に気に入った場合は、REPLからテストスイートにコピーアンドペーストするだけです。

私がしていることは、ライニンゲンでプロジェクトを作成することです。しばらく時間をつぶしたい場合は、 lein repl と入力するだけで、プロジェクトクラスパスがそのreplに設定されます。

しかし実際には、Emacs、スライム、スワンククロジュアを使用しています。プロジェクトに移動した後、 M-x clojure-jack-in と入力するだけです。これにより、swankサーバーが起動し、slimeがそれに接続し、バッファーにreplがあります。もちろん、シェルでreplを実行する以上の価値はありません。取得できるのは、別のバッファーにコードを記述し、キーバインドを使用してsexpsまたはより大きなユニットを選択し、それらをreplで実行して、機能するかどうかを確認する機能です。また、スライムは一般的なタスクに便利なキーバインドを提供します。詳細については、githubのswank-clojureを参照してください。

JohnJ、Emacsでも同じことができます。実際、そのフレーズはおそらくトートロジーです。

(add-hook 'after-save-hook etc.

gitのafter-save-hookの例: https://gist.github.com/449668

Eclipseを使用すると、プロジェクトにファイルを保存するたびに単体テスト(または任意のプログラム)を実行できます。プロセス全体は1秒未満で完了します。テスト駆動開発に最適であり、ほとんどの状況でREPLにカットアンドペーストする必要がありません。さらに、テストを続けることができます! :-)

cake を使用すると、テストを起動するたびにJVMの起動時間を回避できます。コマンドラインで cake test を実行するか、プロジェクトにファイルを保存するときにEclipseに実行させることができます。

Leiningen を使用してプロジェクトをセットアップし、ケーキ、およびのインストール反時計回り Eclipseプラグイン。保存するたびにテストを実行するようにEclipseをセットアップするには、[プロジェクト]-> [プロパティ]-> [ビルダー]を選択し、[新規]をクリックして、[プログラム]を選択し、「テストの実行」のように呼び出し、 cake [場所]で、プロジェクトの作業ディレクトリを選択し、オプションの引数に test を追加します。 [ビルドオプション]タブで、[自動ビルド中]を選択します。

このための一般的なアイデアは、Jeff Younkerの著書「Foundations of Agile Python Development」から得ました。 20年間Emacsに携わってきましたが、このトリックにより、最近Eclipseが私のワークフローの先頭に立ちました。


更新:約1年後、Midjeとlazytestオプションを使用して、EmacsとEclipseの両方で開発しながら同じことを行うようになりました。

  

" Clojureでの開発の例を見ると、REPLへのロードファイルの行に沿っているように見え、それらがどのように動作するかを確認し、ファイルを編集し、リロードし、繰り返します。どこでも生成されるクラスやjarはありません......できれば、通常のユーザー(他の開発者ではない)が使用する非自明なプログラムを作成した人々から、ワークフローの例を聞きたいと思います。

で呼び出されるclojure関数のデバッグの例Javaコード(Eclipse)のは簡単ですが、EclipseでJava内からclojure / scala機能を呼び出すことができるようにプロジェクトをリンクする方法を示しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top