www.wikidata.de-de.nina.az
Der korrekte Titel dieses Artikels lautet F Diese Schreibweise ist in der Wikipedia aufgrund technischer Einschrankungen nicht moglich Dieser Artikel behandelt die Programmiersprache Zur Bedeutung von f in der Optik siehe Lichtstarke Fotografie F gelesen F sharp englische Aussprache ɛfː ʃɑrp ist eine typsichere Multi Paradigmen Sprache mit starkem Fokus auf funktionale Programmierung fur das Net Framework Die Syntax ahnelt der von OCaml sehr stark da diese Sprache als Vorbild fur die Implementierung der funktionalen und imperativen Sprachelemente diente Im Gegensatz zu OCaml hat F kein strukturiertes Typsystem sondern ein normatives dies ist um bessere Kompatibilitat mit C zu erreichen F Funktionale ProgrammierspracheBasisdatenParadigmen multiparadigmatisch funktional imperativ objektorientiertErscheinungsjahr 2002Designer Don Syme Microsoft ResearchEntwickler F Sharp Software Foundation Don Syme Microsoft Aktuelle Version 7 0 1 8 November 2022 Typisierung statisch stark implizitBeeinflusst von Objective CAML C Haskell ElmBeeinflusste Elm F LiveScript ElixirBetriebssystem plattformubergreifendLizenz Apache Lizenz 2 0F Software FoundationDie Objekt orientierte Seite von F ist deshalb auch signifikant anders als die in OCaml F ist voll interaktionsfahig mit allen anderen Sprachen des NET Systems und bietet durch das Net Framework und Mono die Moglichkeit den Code sowohl auf Windows als auch auf Linux der BSD und illumos Familie und macOS einzusetzen Via Xamarin sind auch Android und iOS als Zielplattformen moglich Ursprunglich wurde F als Forschungsprojekt von Microsoft Research entwickelt derzeit wird es von Microsofts Entwicklungsabteilung und der F Software Foundation fortgefuhrt F wurde als Teil von Visual Studio 2010 erstmals offiziell unterstutzt und mit ausgeliefert 2 Im November 2010 wurde F sowie zugehorige Compiler und Bibliotheken unter der Apache Lizenz 2 0 freigegeben Inhaltsverzeichnis 1 Einige Sprachmerkmale 1 1 Werte 1 2 Funktionen 2 Syntax 3 Entwicklungsumgebung und Compiler 4 Beispiele 5 Literatur 6 Weblinks 7 BelegeEinige Sprachmerkmale BearbeitenWerte Bearbeiten In uberwiegend imperativen Sprachen sind Variablen das primare Sprachkonstrukt um Werte zu speichern Dies geschieht in funktional orientierten Programmiersprachen wie F durch unveranderliche englisch immutable Sprachkonstrukte Mit dem haufig eingesetzten Schlusselwort let konnen Werte eines bestimmten Typs deklariert werden let pi 3 14159265 let name John F bietet Typableitung d h Typen von Ausdrucken werden automatisch ermittelt Beispielsweise bekommt pi automatisch den Typ des Gleitkommazahl Literals zugewiesen Veranderliche Variablen sind mit dem mutable Schlusselwort moglich und dann mit dem Zuweisungsoperator lt verandert Dies wird jedoch in den meisten Fallen nur selten getan da die beschriebene Unveranderlichkeit von Werten als passender zur Sprachphilosophie gesehen wird in FSharp Dies nennt sich in F auch functional first also funktional zuerst 3 let mutable x 10 x lt 15 Werte im Nachhinein zu verandern ist auch durch die Verwendung von sogenannten reference cells moglich let x ref 0 x hat den Typ int ref ist also eine Referenz auf einen Integer x 5 x wird ein neuer Wert zugewiesen printfn i x Mittels des Operators wird x dereferenziert Gibt 5 aus Funktionen Bearbeiten Funktionen werden wie andere Werte mit let deklariert und konnen Parameter erwarten let square x x x let add x y x y Funktionen konnen Funktionen als Parameter erwarten siehe Funktion hoherer Ordnung let do twice f x f f x Die Typen der Parameter werden automatisch erkannt konnen aber auch explizit deklariert werden let add x int y int int x y let do twice f int gt int x int f f x Die Anweisung printfn A do twice square 5 gibt 625 das Quadrat des Quadrats von 5 aus Die Funktion do twice kann mit Hilfe des Kompositionsoperators und nach Eta Reduktion auch als let do twice f f gt gt f geschrieben werden Im obigen Beispiel wird fur square der Typ span class n int span span class w span span class o gt span span class w span span class n int span ermittelt das heisst square ist eine Funktion die einen Parameter vom Typ int erwartet und einen Wert vom Typ int zuruckgibt Fur span class n do twice span erhalt man den Typ span class o span span class k span span class n a span span class w span span class o gt span span class w span span class k span span class n a span span class o span span class w span span class o gt span span class w span span class k span span class n a span span class w span span class o gt span span class w span span class k span span class n a span Dies bedeutet do twice ist eine Funktion die als ersten Parameter einen Wert vom Typ span class o span span class k span span class n a span span class w span span class o gt span span class w span span class k span span class n a span span class o span eine Funktion mit einem Parameter vom Typ span class k span span class n a span und einem Ruckgabewert vom Typ span class k span span class n a span bekommt Als zweiten Parameter erhalt sie einen Wert vom Typ span class k span span class n a span und sie gibt einen Wert vom Typ span class k span span class n a span zuruck span class k span span class n a span hat hier die Rolle einer Typvariable grob vergleichbar mit Generic oder Template Parametern in Java C siehe Polymorphie Programmierung In F werden Parameter ohne Klammern etc nur durch Leerzeichen getrennt an die Funktion ubergeben Nur wenn als Parameter der Ruckgabewert einer anderen Funktion benotigt wird mussen Klammern gesetzt werden um die Evaluierungsreihenfolge der Ausdrucke zu definieren Bei span class n printfn span span class w span span class s A span span class w span span class o span span class n add span span class w span span class mi 5 span span class w span span class mi 8 span span class o span gehoren die Werte 5 und 8 zur Funktion span class n add span deren Ruckgabewert ist ein Parameter fur die Funktion span class n printfn span F ermoglicht Closures und verwendet Currying automatisch let add x y x y let inc add 1 In der Definition von inc wird der erste Parameter der Funktion add an den Wert 1 gebunden Das Ergebnis dieser partiellen Funktionsanwendung ist eine neue Funktion mit nur noch einem Parameter Die Auswertung des Ausdrucks inc 5 liefert als Ergebnis 6 F unterstutzt Tupel let u 3 6 let v 2 3 let add a b c d a c b d let x y add u v F bietet Discriminated Unions 4 und Pattern Matching Ein Element vom Typ Baum ist entweder ein Ast und enthalt zwei Elemente vom Typ Baum oder es ist ein Blatt und enthalt einen Integer type Baum Ast of Baum Baum Blatt of int let rec baumSumme x match x with Ast l r gt baumSumme l baumSumme r Blatt x gt x Ebenso gibt es Type Provider fur die typsichere Verarbeitung externer Daten mit IntelliSense 5 In F ist auch objektorientiertes Programmieren moglich Beispiel fur eine Klassendeklaration type Person val name string val mutable age int new n a name n age a member x Name x name member x Age with get x age and set v x age lt v member x Print printfn s ist i Jahre alt x name x age Nullzeiger werden nur fur die Interaktion mit Klassen aus dem Net Framework benotigt Syntax BearbeitenIm F Code sind zwei Syntaxformen moglich einfache Syntax und ausfuhrliche Syntax Die einfache Syntax wird standardmassig verwendet Beispiel fur die einfache und ausfuhrliche Syntax einfache Syntax ausfuhrliche Syntaxlet mutable x 1 while x lt 3 do x lt x 1 let mutable x 1 while x lt 3 do x lt x 1 donetype Person val name string val mutable age int type Person class val name string val mutable age int endBei der einfachen Syntax sind die Einruckungen zwingend erforderlich bei der ausfuhrlichen konnte man sie auch weglassen Entwicklungsumgebung und Compiler BearbeitenF Code wird kompiliert hierbei entsteht Zwischencode in der Common Intermediate Language CIL genau wie bei Programmen die in C oder VB NET geschrieben wurden Es gibt auch eine interaktive Umgebung bzw F Interpreter F Interactive oder kurz FSI Damit kann man den Code direkt in der Konsole schreiben Eingaben im Interpreter sind mit abzuschliessen wodurch auch mehrzeilige Eingaben ermoglicht werden Nach dem Kompilieren fuhrt F Interactive den Code aus und schreibt die Signatur aller kompilierten Typen und Werte in das Konsolenfenster Auch Fehlermeldungen werden so ausgegeben 6 Dieser Interpreter erlaubt in unterstutzten Editoren wie Visual Studio Code die Ausfuhrung von Code ohne vorherige Kompilierung so wie dies von dynamischen Sprachen bekannt ist Ausserdem gibt es den Fable 7 Ubersetzer mit dessen Hilfe sich F Code in JavaScript Rust Python PHP und Dart ubersetzen lasst Beispiele BearbeitenFolgende Beispiele geben Hello World aus let main System Console WriteLine Hello World oder printfn Hello World Die folgende Funktion implementiert die rekursive Ackermannfunktion let rec ack m n if m 0 then n 1 else if n 0 then ack m 1 1 else ack m 1 ack m n 1 Literatur BearbeitenOliver Sturm F Einstieg und praktische Anwendung entwickler press 2012 ISBN 978 3 86802 083 0 Weblinks BearbeitenThe F Software Foundation Abgerufen am 5 Juni 2014 englisch F Dokumentation In Microsoft Docs Microsoft abgerufen am 27 April 2014 F compiler Basisbibliothek und Tools auf GitHub Abgerufen am 9 Juni 2020 englisch F at Microsoft Research Microsoft Research abgerufen am 27 April 2014 englisch F Homepage von Microsoft Research The F Survival Guide CTO Corner archiviert vom Original am 15 Juli 2011 abgerufen am 27 April 2014 englisch F Cheatsheet In Github Abgerufen am 9 Juni 2020 englisch Scott Wlaschin Twenty six low risk ways to use F at work In F for fun and profit 20 April 2014 abgerufen am 9 Juni 2020 englisch Try F F Software Foundation abgerufen am 9 Juni 2020 englisch Interaktives Tutorial Belege Bearbeiten Announcing F 7 9 November 2021 abgerufen am 14 September 2023 amerikanisches Englisch F to ship as part of Visual Studio 2010 Don Syme s WebLog on the F Language and Related Topics Functional first Programming with F Abgerufen am 14 September 2023 amerikanisches Englisch Unterscheidungs Unions auf learn microsoft com Type Provider Microsoft F Interactive Referenz Fable JavaScript you can be proud of Abgerufen am 14 September 2023 Normdaten Sachbegriff GND 7578680 1 lobid OGND AKS Abgerufen von https de wikipedia org w index php title F Sharp amp oldid 239249855