1)Les extensions (parcels): load parcel refactoringBroser ¥Browser graphique beaucoup plus pratique ¥Permet de faire des sortes de Runtime ¥Permet de gÈnÈrer les mÈthodes dÕaccËCso(dingAssistant)
2)ProblËmesde compatibilitÈsVisualWorks ? Non !
3)Sauvegarde(filein, fileout, changes): Voir le forum sur ma page.
LÕÈvaluation et le transfert des arguments sont effectuÈs par les messages : value:unArguement value:arg1value:arg2value:arg3value:arg4
voir value: 12.
C) Conditionnelles
Messages ayant pour receveur un boolÈen et pour argument un bloc. Ils sont implÈmentÈs dans les classes : Boolean, TrueetFalse ifTrue: unBloc ifFalse: unBloc ifTrue: b1 ifFalse: b2 ifFalse: b1 ifTrue: b2
N = 0 ifTrue : [ÔouiÕ]. N = 0 ifTrue : [ÔouiÕ] ifFalse: [ÔnonÕ].
Exemple: Ecrire un bloc qui calcule la valeur absolue dÕun nombre.
La classe objet implÈmente la mÈthode copy : copy "Answer another instance just like the receiver. Subclasses normally override the postCopy message, but some objects should not be copied override copy." ^self shallowCopy postCopy
Ô 232 Õ copy #(1 34 55) copy C:= Compteur new. C copy
ÔegalÕ = ÔegalÕ---> true mais ÔegalÕ == ÔegalÕ---> false
ÔegalÕ et ÔegalÕ sont de vrais jumeaux : ils ont la mÍme structure et le mÍme comportement mais ce sont deux entitÈs physiquement distinctes (leur adresse mÈmoire est diffÈrentes)
#egal == #egal ---> true(les symboles sont uniquesÉ) Ô #egal Õ ~= Ô #egalÕ ---> fa(lesechaines ne sont pas inÈgale structurellement)
Evaluation dÕune conditionnelle
N = 0 ifTrue : [Transcript show: Ôla valeur est nÈgativeÕ].
true
false
instancede True False
ifTrue: aBlock ^aBlock value
Chapitre II: Les collections
Types de donnÈes ¥Tableaux ¥ChaÓnes ¥Ensembles ¥Listes (vectors) ¥Listes triÈs ¥Dictionnaires ¥Intervalles ¥Palettes de couleurs ¥Streams ¥...
ifFalse: aBlock ^nil
Classes SmallTalk Array String, Symbol Set, Bag LinkedList, OrderedCollection SortedCollection Dictionary Interval ColorPalette Stream
¥ItÈrations conditionnelles:whileTrue: whileFalse: ¥Argument: un bloc (instance de BlockClosure) ¥Receveur:un bloc dont l'Èvaluation est un boolÈen Exemple:
20 Chapitre I: D) Un arbre de dÈcision pour choisir le type de collection accËs par clÈ externe ? oui non
clÈ entier ? non oui
duplication possible ? oui non
ajouts possibles Dictionary BagSet oui non Array fonction de tri ? oui non OrderedCollection SortedCollection LinkedList
ItÈrations (suite)
¥ItÈrations conditionnelles:whileTrue whileFalse repeat ¥Receveur:un bloc dont l'Èvaluation est un boolÈen. Exemples:
|n f| f:=1. n:=4. [f:= f * n. n := n - 1. n=1]whileFalse. ... [f:= f * n. n := n - 1. n>1]whileTrue. ... [n>1]whileTrue:[f:= f * n. n := n - 1.]. ... [n=1]whileFalse:[f:= f * n. n := n - 1.]. ... [ f:= f * n. n := n - 1. n = 1 ifTrue:[^f]]repeat.
Chapitre II. ItÈrations
¥ItÈrations numÈriques:timesRepeat: ¥Argument: un bloc quelconque ‡ exÈcuter ¥nombre de fois ‡ exÈcuter le bloc receveurReceveur: le Exemple:
10timesRepeat:[Transcript show: 'Test]. "ExÈcute le bloc 10 fois"
|n f| f:=1. n:=4. k:=n. ntimesRepeat:[ f:= f * k. k := k - 1.].
Chapitre II. ItÈrations ¥ItÈrations numÈriques:to:by:do: ¥Argument to:l'entier fin de l'intervalle de valeur ¥Argument by:l'incrÈment de l'intervalle ¥un bloc quelconqueArgument do: ¥Receveur: lepremier entier de l'intervalle de rÈpÈtition Exemple: parcourt les valeurs de l'intervalle
10 to: 65 by: 5 do: [:element | Transcript show: element printString; show: '---']
Le rÈsultat sera dans la fenÍtre du Transcript: 10---15---20---25---30---35---40---45---50---55---60---65
Pour un incrÈment Ègal ‡ 1, on utilise la mÈthode to:do:
Chapitre II. ItÈrations
¥ItÈrations numÈriques:timesRepeat to:by:do:to:do: ¥ImplÈmenteur:un nombre ¥DÈfinition des mÈthodes timesRepeat:b (self=0) ifTrue: [^nil]. b value. ^(self - 1) timesRepeat: b.
to:stopdo:aBlock (Interval from: self to: stop by: 1) do: aBlock
to:stopby:stepdo:aBlock (Interval from: self to: stop by: step) do: aBlock
Chapitre II. ItÈrations ¥ItÈrations numÈriques:to:do: ¥l'entier fin de l'intervalle de valeurArgument to: ¥Argument do:un bloc quelconque ¥premier entier de l'intervalle de rÈpÈtitionReceveur: le Exemple:
30 ItÈrations ¥ItÈrations de collections:reject:select: (resp.p)our filtrer (resp. rejeter) ¥Argument: un bloc (instance de BlockClosure) ¥Receveur:une collection Exemple: Les ÈlÈments pour lesquels le bloc est ÈvaluÈ ‡ true (resp. false) sont stockÈs dans une nouvelle collection qui sera retournÈe en valeur
'Salut les gars' select: [:car | car ~= (Character space)] $'Salutlesgars'
ItÈrations ¥ItÈrations de collections:detect:etcollect: ¥Argument: un bloc (instance de BlockClosure) ¥Receveur:une collection Exemple: retourne le premier ÈlÈment qui vÈrifie les conditions du bloc #(#(1 2) #(1 2 4) #(2 4 6))detect: [:element | (element size) = 3] $#(1 2 4) listeDesComptes detect: [:c | (c credit) > 1000 ] Retourne la collection contenant chaque Èvaluation sur chaque ÈlÈment.
'salut les gars' collect: [:car | car asUppercase] $'SALUT LES GARS'
33 ItÈrations ¥ItÈrations de collections:inject:into: ¥une valeur (initialisation du premier argument)Argument 1: ¥Argument 2:un bloc ‡ 2 arguments ¥Receveur:une collection Exemple: (1 to: 4) inject: 1 into: [:f :suivant | f * suivant ] $24 f est initialisÈe ‡ 1 (argument de inject:) et multipliÈ par les valeurs successives de suivant qui parcourt l'intervalle [1 4].
Evite les variables locales Pas de rÈfÈrences ‡ des variables extÈrieures au bloc. Gain de performances.
32 Un exemple dÕutilisatiodnetectfort utile pour les Ètourdi(e)s...:
Dans la mÈthode de la classe Class: subclass: tinstanceVariableNames: fclassVariableNames: dpoolDictionaries: scategory: cat ´ On met au dÈbut ce qui suit ª blocktest := [:sc | sc printString = t asString]. test := (self allSubclasses detect: blocktest ifNone: [nil]) isNil. errmsg := [^Dialog warn: 'La classe ' , self printString , ' possËde dÈj‡ une sous-classe ' , t asString]. test ifFalse: errmsg.