7

やってみることで Smalltalk を学ぼうとしているので、単純な「Matrix」クラスを作成することで構文とスタイルを把握しています。

.stまず第一に、優れたSmalltak チュートリアル (これは完全にオプションですが) にリンクしていただければ幸いです。その代わりにメソッド)。

次に、TDD について: このプロジェクトでは を呼び出しgst-sunit -f matrix.st -f matrix-test.st BaseMatrixTestsていますが、それよりも優れた方法があるはずです。ある?

そして最後に、アサートについて: メソッドを作成し、その中にアサートを入れようとしています。

Matrix>>multiplyBy: anotherMatrix [
    [ self isNotEmpty ] assert.
    "Do Multiplication"
    [ result dimensions = (self height)@(anotherMatrix width) ] assert.
]

どうすればそのようなアサーションを行うことができますか?

編集:明示的にマークされた質問。

4

10 に答える 10

11

さて、ここにいくつかの作品があります。

まず、私はmarkusQに同意しますが、私は完全に同情しています。EMACSで直接コードを記述できるようにしたいと思います。Bt Smalltalkの特徴の1つは、SmalltalkWayのことをやりたくない人には本当に寛容ではないということです。この場合、SmalltalkWayはブラウザを使用することです。

第二に、これがSmalltalk Wayである理由の一部は、Smalltalkが多くの点で他の言語とは異なるということです。実際には、すべての実用的な目的で、「個別の」Smalltalk実行可能ファイルを作成する方法はありません。実行できるのは、独自のコードの比較的小さなフラグメントを追加したSmalltalkのイメージを作成することだけです。外部エディターを使用してコードを作成する場合、表示する構文と同様に、XMLよりも手作業で入力する方がやや簡単なインポート/エクスポート形式を文字通り手作業で入力するだけです。しかし、少しだけ。

道徳は、ブラウザを使ってSmalltalkの方法で実行することです。

Smalltalkにはかなり良いチュートリアルがいくつかあります。私は通常Squeakを使用しているので、ここで見たものはSqueakを使用しています。

TDDでは、SmalltalkがxUnitを最初に入手したので、運が良かったです。Smalltalkの場合、これはSUnitと呼ばれ、ここに優れたチュートリアルがあります。

基本的に「契約による設計」アプローチのように見えるアサーションを使用しています。ここにあるように、Smalltalkに契約によってデザインを追加する作業が行われています。単純なアサーションの場合、このSO質問のようにコードを追加できます。

assert: aBlock 
    "Throw an assertion error if aBlock does not evaluates to true."
    aBlock value
        ifFalse: [AssertionFailure signal: 'Assertion failed']
于 2009-03-22T07:07:18.077 に答える
9

私はそれを言うのは嫌いですが (聞きたくないことを明確に示したからです)、IDE に入ります。IDE を使用せずに smalltalk を理解しようとするのは、パリに行ってマクドナルドで食事をするようなものです。確かに、あなたはパリにいますが、それが何であるかに実際にさらされていません.

smalltalk の重要な点は、それがすべてオブジェクトだということです。ずっと下 (整数と文字はオブジェクト) とずっと上 (クラス、メソッド、ブラウザー、IDE 自体) はすべて object です。それと戦うことを主張するなら、何かをドラッグ アンド ドロップして C の書き方を学びたいと思っている人と同じくらいの幸運を手にすることができます。

于 2009-03-22T05:57:31.693 に答える
3

チュートリアルのリクエスト以外に、ここに質問はありません。何を知りたいのか明確にしていただけますか?

初心者向けのリソースの良いリストは、この質問にあります: https://stackoverflow.com/questions/481976/is-there-a-dive-into-smalltalk-book

于 2009-03-22T05:54:21.590 に答える
1

アサーションについては、最近投稿された他の質問をご覧ください。

TDD に関しては、はい、呼び出しgst-sunit -f matrix.st -f matrix-test.st BaseMatrixTestsが最良の方法です。他のすべてはそれに基づいて構築されています。たとえば、これらは3つの代替案になる可能性があります。

  • AllMatrixTests*パッケージのすべての TestCase サブクラスが偽のサブクラスから継承されるようにして、gst-sunit のコマンド ラインで (さらにテストを追加するときに)言うことができるようにします。
  • matrix-test.st から matrix.st にファイルを作成し、-f オプションを 1 つ削除します。
  • ここで説明されているように、Makefile と package.xml ファイルを作成して、パッケージの .star ファイルを作成します。それからあなたはちょうどすることができますgst-sunit -pMatrix.
于 2009-03-23T08:46:08.877 に答える
1

したがって、assert については、Squeak Smalltalk はすでに Object>>assert をもたらします。

self assert: self isNotEmpty.
self assert: result dimensions equal: (self height)@(anotherMatrix width)

GNU smalltalk を使用している場合、ここでアサーションを行う方法がわかるかもしれません: Smalltalk とアサーション

ニコ

于 2009-03-22T17:20:21.537 に答える
0

Smalltalk Primerは、Smalltalkを使用したメッセージ指向プログラミングの要点の紹介です。

于 2009-03-22T18:33:35.947 に答える
0

http://stores.lulu.com/store.php?fAcctID=2748699 (pdf をダウンロードするためのリンクもあります)

于 2009-12-24T16:11:52.593 に答える