Domanda

Sto cercando di imparare Smalltalk facendo, quindi mi sto una presa sulla sintassi e lo stile da buiding una semplice classe "Matrix".

Prima di tutto, sarei grato se collegato a un buon tutorial Smalltalk (anche se questo è del tutto facoltativa), preferibilmente uno che non comporta utilizzando la GUI (preferirei digito i miei .st s di pesce intorno l'esploratore gerarchia per mettere i metodi al loro posto).

Poi, il TDD: Per questo progetto che sto chiamando gst-sunit -f matrix.st -f matrix-test.st BaseMatrixTests, e non v'è destinato ad essere un modo migliore di quello. C'è?

E, infine, il asserisce: Sto cercando di scrivere un metodo e mettere afferma all'interno, ad esempio:.

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

Come faccio a fare questo tipo di afferma?

Modifica: Domande contrassegnati esplicitamente

.
È stato utile?

Soluzione

D'accordo, diversi pezzi qui.

In primo luogo, sono d'accordo con MarkusQ, anche se ho completamente simpatizzo: Preferisco essere in grado di scrivere il mio codice in Emacs direttamente. Bt una delle cose su Smalltalk è che è davvero molto spietato di persone che non vogliono fare le cose nel modo Smalltalk. In questo caso, la Via Smalltalk è quello di utilizzare i browser.

In secondo luogo, parte della ragione che questo è il modo Smalltalk Smalltalk è che è, in molti modi, non come altre lingue. C'è davvero, a tutti gli effetti, non c'è modo di fare un eseguibile Smalltalk "separato": tutto quello che puoi fare è rendere l'immagine di Smalltalk con alcuni relativamente piccoli frammenti del proprio codice aggiunto Quando si scrive codice usando un editor esterno. , come con la sintassi si mostra, si è letteralmente appena mano digitando un formato di importazione / esportazione che è un po 'più facile da mano tipo di XML. Ma solo un po '.

La morale è, farlo nel modo Smalltalk, con i browser.

Ci sono alcuni piuttosto buoni tutorial per Smalltalk circa. Io di solito uso Squeak, in modo da quelli che ho visto sta utilizzando Squeak, come qui .

In TDD, siete fortunati perché Smalltalk è stato il primo posto per ottenere xUnit. Per Smalltalk, si chiama Sunit, e c'è un buon tutorial qui .

Si sta utilizzando affermazioni c'è in quello che sembra essere fondamentalmente un approccio di "progettazione per contratto". C'è stato lavoro fatto sulla aggiungendo progettazione per contratto a Smalltalk, come qui . Per semplici asserzioni, è possibile aggiungere codice come in questa domanda SO .

assert: aBlock 
    "Throw an assertion error if aBlock does not evaluates to true."
    aBlock value
        ifFalse: [AssertionFailure signal: 'Assertion failed']

Altri suggerimenti

Odio dirlo (perche 'chiaramente indicato che non vuoi sentire), ma prende l'IDE. Cercando di ottenere la testa intorno Smalltalk senza usare l'IDE è come andare a Parigi e mangiare al McDonalds. Certo, siete a Parigi, ma non si è realmente esporsi a ciò che è tutta una questione.

La cosa fondamentale di Smalltalk è che E 'tutti gli oggetti . Per tutto il tragitto verso il basso (interi e personaggi sono gli oggetti) e tutta la strada fino (classi, metodi, i browser, l'IDE stesso) sono tutti gli oggetti . Se ti ostini a combatterla avrai circa tanto fortuna come qualcuno che vuole imparare a scrivere C trascinando e rilasciando le cose.

Se avete scaricato Cincom Smalltalk non-commerciale, ci sono una serie di tutorial online. Inizia da qui:

http://www.cincomsmalltalk.com/userblogs/cincom/blogView ? content = tutorial

Se avete scaricato Squeak, cominciare da qui:

http://wiki.squeak.org/squeak/792

E sì, è davvero necessario utilizzare l'IDE di lavorare efficacemente con Smalltalk.

Il test, caricare Sunit. In Cincom Smalltalk, è un componente caricabile; Ho coperto di carico (e l'uso) nelle video tutorial collegate sopra. Io non sono del tutto sicuro di come caricare per Squeak, o se è parte della base lì, ma è certamente disponibili per esso.

Oltre a una richiesta di un tutorial, non vedo una domanda qui. Potrebbe chiarire che cosa è che vuoi sapere?

Un buon elenco di risorse per un principiante può essere trovato in questa domanda: https://stackoverflow.com/questions/481976/is-there-a-dive-into-smalltalk-book

Quindi, afferma riguardo, Squeak Smalltalk porta già oggetto >> assert: Quindi, suppongo che si può fare:

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

Se si utilizza GNU Smalltalk, questo potrebbe rispondere come fare affermazioni c'è: Smalltalk e asserzioni

Niko

Per quanto riguarda afferma, si prega di guardare l'altra questione da poco pubblicato.

Per quanto riguarda TDD, sì, chiamando gst-sunit -f matrix.st -f matrix-test.st BaseMatrixTests è una sorta di migliore dei modi. Tutto il resto si basa solo su quello, ad esempio, questi potrebbero essere Thee alternative:

  • fanno tutte le sottoclassi TestCase per il pacchetto ereditano da una sottoclasse falso in modo che si può dire AllMatrixTests* sulla linea di comando di GST-sunit (quando si aggiungono altri esami).
  • file in matrix.st da matrix-test.st, eliminando così un'opzione -f.
  • creare un file Makefile e package.xml per creare un file .star per il pacchetto, come descritto qui . Poi si può fare proprio gst-sunit -pMatrix.

E 'stato suggerito in precedenza per aggiungere #assert: a Object, ma mi piacerebbe aggiungere #assert a BlockClosure (o qualsiasi altra cosa [] class è in GNU Smalltalk).

assert
    this value ifFalse: [AssertionFailure signal: 'Assertion failed']

e quindi utilizzare come in

[ value notNil ] assert.
[ value > 0 ] assert.
[ list isEmpty not ] assert.

eccetera.

http://stores.lulu.com/store.php?fAcctID=2748699 (Inoltre troverete il link per scaricare il pdf)

  

preferirei digito i miei .sts di pesci intorno l'esploratore gerarchia per mettere i metodi al loro posto).

Lo dici adesso e mi sono sentito allo stesso modo fino a quando ho investito qualche tempo in imparare a usare questi strumenti.

E dico questo come un utente corrente di Vim ed ex utenti di Emacs. Ho davvero diventato abbastanza produttiva utilizzando il browser di classe e altri strumenti in Pharo ora che ho imparato le corde.

Detto questo, se si vuole veramente a seguire la propria strada, GNU Smalltalk è la scelta giusta per voi.

Vorrei far notare a questo punto però che almeno Pharo ha una classe Matrix, che è possibile utilizzare per l'ispirazione. Squeak dovrebbe, anche. Forse si impara quanto sia utile il browser di classe sta esaminando Matrix. ;)

Smalltalk Primer è un'introduzione al Elementi essenziali di programmazione orientati ai messaggi con Smalltalk

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top