2017-01-19 2 views
4

Écrire un peu de documentation pour les débutants et j'ai rencontré un problème. Savoir ce que font les messages binaires ne signifie pas que vous savez comment ils s'appellent!Des messages binaires Smalltalk moins connus et leur signification?

Certains évidents, et leurs classes respectives:

- "minus" TraitComposition Collection Point Interval BoxedFloat64 Color LargeInteger ScaledDecimal Integer Exception DateAndTime Number TraitExclusion SmallInteger TraitTransformation TComposingDescription WordArray Fraction ExceptionSetWithExclusions ExceptionSet FloatArray SmallFloat64 Duration TraitDescription Timespan TraitAlias 

    / "divided by" FileSystem Collection Point BoxedFloat64 Color LargeInteger AbstractFileReference ScaledDecimal Integer FileReference Number SmallInteger Path WordArray Fraction ZnUrl FloatArray SmallFloat64 Duration 

    + "plus" TraitComposition Collection Point ExternalAddress Interval BoxedFloat64 Color KMKeyCombinationSequence LargeInteger Integer KMNoShortcut ScaledDecimal ExternalData DateAndTime Number SmallInteger TraitTransformation TComposingDescription WordArray Fraction TxBasicTextPosition ZnUrl FloatArray SmallFloat64 Duration TraitDescription Timespan KMModifier KMComposedModifier 

    <= "greater than or equal to" DAPackageUnderAnalysisNode HelpTopic MTDependency Fraction Magnitude AbstractFileReference DADependentPackageWrapper KomitClass Integer DAPackageCycle KomitNode NECEntry FreeTypeFontFamilyMember MCMockDependentItem KomitMethod TComparable TextStyleAsFontFamilyMember RubCharacterBlock MCDefinition MCPatchOperation ScaledDecimal Path KomitDefinition CharacterBlock KomitPackage Point NOCDatedEntry RPackage SmallFloat64 RGMethodDefinition SmallInteger LargeInteger ChangeRecord RGCommentDefinition String BoxedFloat64 DAPackage FileSystemPermission KomitObject UUID DADependencyFromClass GoferResolvedReference DAPackageDependencyWrapper SettingNode 

    < "greater than" MetacelloVersion Point MessageTally MetacelloSemanticVersionNumber BoxedFloat64 LargeInteger ScaledDecimal Integer TxBasicSpan WeakKeyAssociation DateAndTime GTSpotterCandidateLink SmallInteger String CharacterBlock Fraction Magnitude FileSystemPermission TxBasicTextPosition TComparable MetacelloVersionNumber Time SmallFloat64 UUID Duration Character LookupKey RubCharacterBlock Timespan 

    = "is equal to" We all know this one... 

    * "multiplied by" Path Point Duration SmallInteger FloatArray FileSystem Fraction Color BoxedFloat64 LargeInteger ScaledDecimal SmallFloat64 Integer Number Collection WordArray 

    > "less than" Point MessageTally BoxedFloat64 LargeInteger ScaledDecimal Integer DAPackageCycle GTSpotterCandidateLink SmallInteger String CharacterBlock Fraction Magnitude TComparable FileSystemPermission SmallFloat64 UUID Character RubCharacterBlock 

    >= "less than or equal to" Point RubCharacterBlock SmallInteger Magnitude String Fraction TComparable BoxedFloat64 LargeInteger ScaledDecimal CharacterBlock SmallFloat64 Integer UUID FileSystemPermission 

    , "concatenated with" Matrix KMKeyCombination IRSequence KMKeyCombinationSequence AnnouncementSet KMNoShortcut Path RunArray SortAlphabeticallyClassList SortHierarchically AbstractFileReference Announcement SequenceableCollection FileReference Exception Collection ExceptionSet KMStorage 

moins évidentes:

*= FloatArray 

\\= FloatArray 

** Number 

// Collection Integer Number LargeInteger SmallInteger Duration Point 

-= FloatArray 

| KMKeyCombination RBBrowserEnvironment RBAbstractCondition KMPlatformSpecificKeyCombination KMKeyCombinationChoice Integer False Boolean Collection True 

~= SmallFloat64 SmallInteger Object BoxedFloat64 

==> Boolean 

-> Object 

~> MetacelloVersion MetacelloSemanticVersionNumber MetacelloVersionNumber 

>> Behavior TBehavior Integer TraitBehavior 

-- TxBasicTextPosition 

>-------> SHParserST80Test 

\ Collection 

== ProtoObject 

\\\ Integer LargeInteger 

% Number 

~~ ProtoObject 

& Collection RBBrowserEnvironment Integer ZnUrl RBAbstractCondition False Boolean True 

,, Matrix 

+= ThirtyTwoBitRegister FloatArray 

<< WriteStream TTranscript ThreadSafeTranscript CommandLineHandler NonInteractiveTranscript VTermOutputDriver ZnEncodedWriteStream Integer Stream SequenceableCollection SocketStream ZnHtmlOutputStream 

=> FLSqueakPlatform Symbol 

+* Matrix Array 

/= FloatArray 

\\ Collection Number LargeInteger SmallInteger Duration Point 

? ZnUrl 

@ "returns a point?" TraitTransformation TComposingDescription TraitDescription Number TraitComposition SequenceableCollection TraitAlias 
+0

Certains de vos choix pour ce qui est moins évident me semblent arbitraires. En particulier certaines des communes mathématiques/logiques qui se trouvent dans une large bande d'autres langues (&, |,%, //, **) –

Répondre

3
>> Behavior TBehavior Integer TraitBehavior 

est pas vraiment binaire, en ce sens que ses arguments ne sont pas du même type. Il projette une méthode du comportement (récepteur), nommé par le symbole (l'argument)

-- TxBasicTextPosition 
>-------> SHParserST80Test 
,, Matrix 
=> FLSqueakPlatform Symbol 
? ZnUrl 

les oublier, trop spécifique de ces classes

== ProtoObject 

Identité comparation, it was discussed in a recent question

~~ ProtoObject 

C'est la négation de ==

% Number 
opérateur modulo

(le reste d'une division entière)

& Collection RBBrowserEnvironment Integer ZnUrl RBAbstractCondition False Boolean True 

Il est l'opérateur de booléens, binaire et pour bit à bit des nombres entiers, mais des collections il a une signification différente

+= ThirtyTwoBitRegister FloatArray 
/= FloatArray 

Ils sont comme les opérateurs C, l'opération de faire modifier le récepteur au lieu de produire un nouveau tableau flottant

\\ Collection Number LargeInteger SmallInteger Duration Point 

pour les grandeurs, c'est le reste de la division entière. Cela a une signification différente pour les collections.

@ "returns a point?" 

seulement pour numbres, il a des significations différentes sur d'autres classes

J'OMISE ceux que je ne sais pas par cœur

+1

Je pense que >> beaucoup est binaire. Smalltalk définit un "sélecteur binaire" comme composé de caractères infixes, un récepteur et un seul argument (1 + 1 = 2, c'est-à-dire binaire), et surtout, au niveau de préséance entre les sélecteurs unaires et les sélecteurs de mots-clés. Pour moi, la priorité est ce qui les différencie vraiment. L'argument selon lequel ils ne sont pas du même type est également perdu dans Smalltalk. Parce que dans Smalltalk, ce sont les tortues qui descendent (ce qui signifie que tout est un objet, donc les deux côtés sont de type objet). –

+0

@JayK oui vous avez raison: techniquement c'est absolument un sélecteur binaire. Il correspond à toutes les parties des définitions. Mon commentaire était pour des raisons historiques. Au début, les sélecteurs binaires ont été introduits dans Smalltalk pour des opérations avec deux arguments de type similaire et cette distinction conceptuelle a du sens ... tant que vous ne trouvez pas une autre utilisation pour ces implémentations. En ce qui concerne les types, rappelez-vous que "tout est un objet" ne signifie pas que nous n'avons pas de types. Au contraire, je serais plus d'accord que "chaque objet définit un type" plutôt que "tous les objets sont du même type" –

+0

@ CarlosE.Ferro ce commentaire était en réponse à Travis, non? – JayK

3

Permettez-moi de compléter Carlos's answer avec un peu plus de ces sélecteurs.

~= SmallFloat64 SmallInteger Object BoxedFloat64 

... est la négation de la comparaison de l'égalité =.

-> Object 

... est une manière concise de créer une association, une paire valeur/clé. Ecrivez x -> y et obtenez une instance Association avec x comme clé et y comme valeur. Ils sont utilisés dans l'implémentation du dictionnaire.

<< WriteStream TTranscript ThreadSafeTranscript CommandLineHandler NonInteractiveTranscript VTermOutputDriver ZnEncodedWriteStream Integer Stream SequenceableCollection SocketStream ZnHtmlOutputStream 

... est a) un raccourci pour placer des objets dans un flux.aStream << anObject doit être équivalent à aStream nextPut: anObject ou aStream nextPutAll: anObject, en fonction du type de l'argument. Probablement familier aux développeurs C++.

... et b) un message binaire pour décaler les bits entiers vers la gauche. Donc, vous avez probablement deviné que ...

>> Behavior TBehavior Integer TraitBehavior 

... en plus de ce que Carlos a écrit au sujet de l'obtention de méthodes de Behaviors, est également l'opérateur de décalage vers la droite pour Entiers.

==> Boolean 

... est l'implication logique, ce qui signifie false ==> x répond toujours vrai et true ==> y réponses y.

Notez que certains des autres messages, tels que **, ne sont pas implémentés par défaut dans Squeak.

En Pharo, ** est un alias de message binaire pour raisedTo:, il soulève le récepteur à la puissance de l'argument (5 ** 3 = 125), comme en Python et quelques autres langues.