• IT-Karriere:
  • Services:

Multiple Dispatch

In Julia dürfen mehrere Funktionen mit dem gleichen Namen, aber unterschiedlichen Argumenten existieren. Bei einem Aufruf der Funktion wählt dann Julia automatisch die passende aus. Im folgenden Beispiel gibt es gleich zwei Mal eine Funktion foo():

  1. function foo(a::Numbers) ...
  2. function foo(a::Float16) ...

Stellenmarkt
  1. SodaStream GmbH, Frankfurt am Main
  2. Radeberger Gruppe KG, Frankfurt am Main

Beide führen eine Berechnung mit einer Zahl a durch. Ruft man später foo() mit einer Zahl vom Typ Float16 auf, würde Julia selbstständig zur zweiten Funktion greifen, in allen anderen Fällen die erste wählen. Auf diesem Weg realisiert die Programmiersprache Polymorphie.

Die einzelnen Varianten von foo() bezeichnet Julia als Methoden. Der Begriff ist somit etwas anders ausgelegt als in objektorientierten Sprachen, wo Methoden in der Regel Teil einer Klasse sind. Die Auswahl der passenden Methode bezeichnet man allgemein als Dispatch.

Julia orientiert sich dabei immer an allen übergebenen Argumenten und deren Typen sowie dem Type Graph. Bei objektorientierten Sprachen fällt die Wahl hingegen meist anhand der Klasse, zu der das Objekt gehört. Julias Ansatz bezeichnet man daher auch als Multiple Dispatch. Dieser ist vor allem bei mathematischen Aufgaben hilfreich. Das bekannteste Beispiel ist die Funktion +, die auf allen möglichen Datentypen eine Addition umsetzen muss. In Julia dürfen Entwickler + einfach um passende Varianten für ihre eigenen Datentypen ergänzen. Es lassen sich sogar Regeln vorgeben, nach denen Julia gemischte Typen (wie die Addition einer Ganzzahl mit einer Gleitkommazahl) in einen eigenen Typ überführen soll (Promotion).

Klassenersatz

Anders als objektorientierte Sprachen kennt Julia keine Klassen. Ähnlich wie C lassen sich jedoch mit dem Schlüsselwort struct mehrere Variablen zu einem neuen Datentyp zusammenfassen:

  1. struct Person
  2. name
  3. alter::UInt8
  4. end

Julia nennt diese zusammengesetzten Datentypen Composite Types. Von der im Beispiel entstandenen Person lässt sich mit einem Funktionsaufruf ein Objekt erzeugen:

  1. hans = Person(Hans Meier, 35)

hans ist damit vom Typ Person. Die aufgerufene Funktion bezeichnet Julia als Constructor. Ähnlich wie das gleichnamige Pendant in objektorientierten Sprachen kann man auch hier den von Julia automatisch bereitgestellten Contructor überladen, indem man einfach weitere passende Methoden definiert.

Standardmäßig lassen sich die Elemente von hans über den Punktoperator zwar auslesen (a=hans.alter), aber nicht verändern. Das gelingt erst, wenn man der struct noch explizit das Schlüsselwort mutable voranstellt. Die entsprechenden Objekte verwaltet Julia grundsätzlich auf dem Heap.

Generisch

Composite Types lassen sich parametrisieren. Andere Sprachen kennen das Konzept als Generics. Die wiederum sind beispielsweise nützlich, wenn der eigentlich zu nutzende Datentyp noch unbekannt ist:

  1. struct Point{T}
  2. x::T
  3. y::T
  4. end
  5. a = Point{UInt8}(2,3)

Erst bei der Erstellung eines Objekts entscheidet sich, welche Daten "Point" speichert. Im Beispiel ist der Typ von a anschließend Point{UInt8}. Analog lassen sich auch Funktionen parametrisieren.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Funktionen und gute ArgumenteParallelverarbeitung 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6.  


Anzeige
Spiele-Angebote
  1. FIFA 21 Standard Edition PS4 (inkl. kostenlosem PS5-Upgrade) für 55€, FIFA 21 Standard Edition...
  2. 22,99€
  3. 14,99€

Bruto 27. Jun 2019

Der Gratis-Kurs bei Coursera von Andrew Ng ist perfekt für Einsteiger. Es gibt mehrere...

Maxabcabcabcqwe 26. Jun 2019

Meiner Meinung nach, ist es einfacher sich die Befehle einer Sprache durch das Aufrufen...

Das... 26. Jun 2019

Ah, das ist schön zu hören! Ich dachte Typisierung ist ein vernachlässigtes Anhängsel wie...

burzum 26. Jun 2019

Doch. Du sagst es ja selbst, das Konzept, die Herangehensweise sind das Entscheidende...


Folgen Sie uns
       


Cyberpunk 2077 angespielt

Cyberpunk 2077 dürfte ein angenehm forderndes und im positiven Sinne komplexes Abenteuer werden.

Cyberpunk 2077 angespielt Video aufrufen
Bauen: Ein Hochhaus aus Holz für Hamburg
Bauen
Ein Hochhaus aus Holz für Hamburg

Die weltweite Zementherstellung stößt jährlich mehr CO2 aus als der Luftverkehr. Ein nachwachsender Rohstoff soll Bauen umweltfreundlicher machen.
Ein Bericht von Werner Pluta

  1. Transformation Söder will E-Auto-Gutschein beim Kauf von Verbrennern
  2. Kohlendioxidabscheidung Norwegen fördert Klimaschutzprojekt mit 1,5 Milliarden Euro
  3. Rohstoffe Kobalt-Kleinbergbau im Kongo soll besser werden

Star Trek Discovery: Harte Landung im 32. Jahrhundert
Star Trek Discovery
Harte Landung im 32. Jahrhundert

Die dritte Staffel von Star Trek: Discovery nutzt das offene Ende der Vorgängerstaffel. Sie verspricht Spannung - etwas weniger Pathos dürfte es aber sein.
Eine Rezension von Tobias Költzsch

  1. Star Trek Prodigy Captain Janeway spielt in Star-Trek-Cartoonserie mit
  2. Paramount Zukunft für Star-Trek-Filme ist ungewiss
  3. Streaming Star Trek Discovery kommt am 15. Oktober zurück

Differential Privacy: Es bleibt undurchsichtig
Differential Privacy
Es bleibt undurchsichtig

Mit Differential Privacy soll die Privatsphäre von Menschen geschützt werden, obwohl jede Menge persönlicher Daten verarbeitet werden. Häufig sagen Unternehmen aber nicht, wie genau sie das machen.
Von Anna Biselli

  1. Strafverfolgung Google rückt IP-Adressen von Suchanfragen heraus
  2. Datenschutz Millionenbußgeld gegen H&M wegen Ausspähung in Callcenter
  3. Personenkennziffer Bundestagsgutachten zweifelt an Verfassungsmäßigkeit

    •  /