pour créer un nouvel instance sur cette classe.
<code smalltalk>
"Instanciation d'une collection via ne... w: 4
Array new: 2
OrderedCollection new: 1000
</code>
Donc premier cas de figure, j'utilise new.
Deu... ple où je vais passer une collection littérale.
<code smalltalk>
OrderedCollection withAll: #(7 7 3 33)
</code>
Une collection littérale commence par un **''#(
vous pouvez utiliser sur vos collections.
===== Code compact =====
Juste un exemple, ci -dessous le code que vous devriez écrire par exemple en Java pour parcourir une collection.
<code java>
ArrayList<String> strings = new ArrayList<S... n person:persons)
strings.add(person.name());
</code>
Je veux parcourir une collection ''persons'', p
omprendre les différences et les ressemblances.
<code java>
ArrayList<String> strings = new ArrayList<String>();
</code>
Ci-dessus un exemple en Java de création d'une ... e comportement de cette collection est le même.
<code>
strings := OrderedCollection new.
</code>
Alors plusieurs choses sont à noter:
* Premièrement, ''n
===
Commençons par le traditionnel Hello World.
<code>
'Hello World' asMorph openInWindow
</code>
D'ailleurs, toutes les expressions, vous pouvez les exécut... r le web, on va faire ça de la manière suivante:
<code>
(ZnEasy getPng: 'http://pharo.org/web/files/pharo.png') asMorph openInWindow
</code>
On va écrire ZnEasy getPng avec une chaîne qui
e quand j'ai une séquence de messages unaires?"
<code>
1000 factorial class name.
"Résultat: LargePositiveInteger"
</code>
Là, j'ai écrit l'expression suivante ''1000 fac... nière que si j'avais mis toutes ces parenthèses:
<code>
(((1000 factorial) class) name)
</code>
Mais on voit que c'est embêtant d'avoir toutes ces parenthèse
loc syntaxiquement, on va utiliser les crochets
<code smalltalk>
[ expr1. expr2. exprn ]
</code>
Ici, vous avez un exemple, on a un crochet ouvrant, un ense... ndre un autre exemple. Ici, on a une expression:
<code smalltalk>
" Evaluer cette expression provoque une erreur"
( 1/0 )
</code>
Si on exécute cette expression, on voit qu'elle
ssages à des classes.
Ci dessous deux exemples:
<code smalltalk>
Time now
</code>
On envoie le message ''now'' à l'objet ''Time'' qui est un nom de classe,... est une classe, ça me renvoie l'heure actuelle.
<code smalltalk>
Date today
</code>
De la même façon, j'envoie le message today à l'objet Date qui est une c
nitialisé la valeur d'instance via l'accesseur.
<code>
| aCounter |
aCounter := Counter new.
aCounter setCounter: 33.
aCounter getCounter.
</code>
Cependant si on tente d'exécuter le code ci-dessous, on obtient une erreur:
<code>
"Ce extrait provoque une erreur"
| aCounter |
aCounter := Co
classe ou d'une méthode.
Voici le navigateur de code principal dans Pharo, c'est Nautilus (menu **Tool...
Dans les slides, on aura ce genre d'extraits de codes pour créer une nouvelle sous-classe.
<code smalltalk>
Object subclass: #Point
instanceVariableNames...
classVariableNames: ''
package: 'Graphics'
</code>
On voit que pour créer une classe en Pharo, on
ks sont délimités par des crochets ''['' '']''.
<code>
4 timesRepeat: [ Transcript show: 'Hello World!' ]
</code>
Dans l'exemple ci-dessus: crochet ouvrant, croc... r qu'une seule super-classe.
voici un exemple de code qui est le produit en croix de deux points:
<code>
(point1 x * point2 y) - (point1 y * point2 x)
</cod
basse de la fenêtre, dans l'onglet "New class"
<code>
Object subclass: #NameOfSubclass
instanceVariab... '
classVariableNames: ''
package: 'MyCounter'
</code>
Ici on va mettre à jour ce modèle pour créer un... but ''count'', on modifie le patron comme suit:
<code>
Object subclass: #Counter
instanceVariableNames... '
classVariableNames: ''
package: 'MyCounter'
</code>
On remarque que l'onglet ''New class'' est préf
un stream en lecture à partir d'une collection.
<code smalltalk [enable_line_numbers="true']>
|stream|
... m position.
"> 4"
stream upToEnd.
"> #($e $f)"
</code>
La collection contient les caractères de l'alph... e étape encore une fois, c'est créer le stream.
<code smalltalk [enable_line_numbers="true"]>
|myStream... 2 6 7 );
contents.
"> #(1 4 8 2 6 7)"
</code>
''(Array new: 6)'' me permet de créer un tablea
est'' qui hérite de la classe **''TestCase''**.
<code>
TestCase subclass: #CounterTest
instanceVariabl... '
classVariableNames: ''
package: 'MyCounter'
</code>
Une fois le code sauvegardé, une nouvelle classe apparaît dans le package, elle est préfixée par un b... r un test, on va définir une méthode d'instance
<code>
testCreateCounterSetAndRead
"Create a Counter i
une collection, par exemple.
Voilà un exemple:
<code smalltalk>
4 timesRepeat: [ self doSomething ].
</code>
On envoie le message "timesRepeat" à l'entier 4... er des boucles. Ici, c'est le message "to: do:"
<code smalltalk>
1 to: 100 do:
[ :i | Transcript show: i; space ]
</code>
Le message "to: do:" est défini sur la classe N
ité** d'exécution dans les expressions ou dans du code, tandis que les **crochets** servent à **définir ... ntenues dans un bloc.
Je vous donne un exemple:
<code smalltalk>
n timesrepeat: [ self doSomething ]
</code>
Ici l'expression "self doSomething" est bien en... is cette fois en envoyant le message "ifTrue:".
<code smalltalk>
x isNil ifTrue: [ self doSomething ]
<