2009-04-08 9 views
0

So die Idee hinter einem Array und einer Funktion sind sehr ähnlich aus einer Black-Box-Perspektive. Sie geben die Eingabewerte ein und rufen den Ausgabewert ab. Ist es besser, die Array-Syntax und die Funktionssyntax gleich zu halten oder ist es besser, Unterschiede zu haben?Matching Array und Funktion Syntax

z.B.

Druck array [0]

Druck func (0)

Vergleich

Druckarray (0)

Druck func (0)

+0

Offensichtlich ein subjektives Thema in der Programmiersprache Design ... –

Antwort

0

Ruby führt einige Verschmelzungen durch - Methoden verwenden (), aber Arrays, Hashes und Lambda-Ausdrücke (die engste Sache, die Ruby haben muss) können alle [] verwenden. Zusammen mit dem Ducktyping bedeutet dies, dass Sie ein Objekt weitergeben und Werte übergeben können, indem Sie [] verwenden, egal, ob es vorausberechnet ist (ein Array), jedes Mal berechnet (ein Lambda-Ausdruck) oder nach Bedarf berechnet und zwischengespeichert wird (was mit ein Hash).

Ein weiteres Beispiel, das die beiden zusammenfasst, ist Haskell. Wie ich mich erinnere, hat es keine in die Sprache integrierte Array-Syntax - der Zugriff auf Array-Indizes ist ein Funktionsaufruf und kann wie jede andere Funktion verwendet werden.

Ich bevorzuge eigentlich die Zusammenführung - es ermöglicht eine einfachere Flexibilität (was ich mag). Zu wissen, ob Sie für Geschwindigkeit oder Speicher optimieren (wie David sagte) ist gut zu wissen, aber ich bin bereit, diese Verantwortung auf mich selbst zu übernehmen, anstatt es in der Sprache eingebaute Hinweise zu lassen.

1

Technisch gesehen hast du recht, es sind beides Mappings, aber in den meisten Programmierern gibt es einen Unterschied: Arrays speichern ihre Werte, während Funktionen ihre Werte berechnen. Mit anderen Worten, (vereinfacht) Arrays sind für Geschwindigkeit optimiert und Funktionen sind für Speicher optimiert. Ich denke, das ist ein guter Unterschied, den es zu wahren gilt.

0

Nun, ich denke traditionell, dies kommt von der C/Algol-Syntax, wo [] direkt in einen Speicher-Offset übersetzt wird, während() ist eine viel kompliziertere Prozedur.

In einigen der neueren Sprachen, [] eine generische Indizierung für primitive Datenstrukturen, zB werden Hashes in Js über zugegriffen:

hash["Hello"]; 
array[0]; 

Ich denke, es nützlich ist, zu halten „index“ Syntax unterscheidet sich von "Argument" -Syntax.

0

Sie haben absolut Recht. Arrays, aber auch Maps und Dictionaries und wohl auch Objekte sind im Wesentlichen Funktionen im mathematischen Sinne. Und tatsächlich gibt es Sprachen, die Arrays als Funktionen von Integern, Maps und Dictionaries als Funktionen ihrer Schlüssel und Objects als Funktionen ihrer Slots behandeln. Zwei dieser Sprachen sind Scala und Clojure.