Redigerer
F Sharp
Hopp til navigering
Hopp til søk
Advarsel:
Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du
logger inn
eller
oppretter en konto
vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.
Antispamsjekk.
Ikke
fyll inn dette feltet!
{{Denne|programmeringsspråket|tonen «fiss» (F♯)|tone}} {{referanseløs}} {{Infoboks programmeringsspråk}} '''F#''' (uttalt som ''F Sharp'') er et funksjonelt programmeringsspråk utviklet av [[Microsoft]] med [[Don Syme]] som hovedarkitekt. F# kan bli kalt et hybridspråk, da det ikke er et rent funksjonelt programmeringsspråk, men forener flere typer paradigmer, deriblant imperativ og [[objektorientert programmering]]. Syntaksmessig er F# stort sett kompatibelt med [[OCaml]], et språk i [[ML]]-familien. I likhet med flere språk utviklet av Microsoft har man gjennom F# tilgang til hele [[.NET]]-rammeverket. Dette gjør at man kan drive utvikling på samme plan i F# som i C# og [[Visual Basic]]. == Historie == Don Syme i Microsoft Research brukte 5 år på å utforske muligheten til å implementere et funksjonelt programmeringsspråk som siktet seg inn på .NET-rammeverket. En av hovedgrunnene til Microsofts investering i F# var å nå inn i nye domener som deres tidligere språk ikke har vært innblandet i, blant annet vitenskapelige og matematiske områder. [[Simon Peyton Jones]], en av de største bidragsyterne til programmeringsspråket [[Haskell]] og kollega av Don Syme, var en nøkkelperson i utviklingen av asynkrone arbeidsforløp i F#. == Syntaks == Syntaksmessig tar F# veldig mye fra OCaml, og flere av språkutviklerne for OCaml ble brukt som ressurser i utviklingen av F#. F# låner også ideer fra flere andre funksjonelle språk, som Haskell, men også fra imperative og objektorienterte språk som [[C Sharp|C#]] og [[Python]]. F# tar i bruk sterk typesetting og implisitt typededuksjon. Som resultat kan man velge hvorvidt man ønsker å spesifikt definere type, eller om kompilatoren skal undersøke det selv. I enkelte tilfeller kan det være en fordel å spesifisere hvilke type man ønsker å bruke for å være sikker på at inndata kommer i den typen man ønsker, og utdata blir levert av samme grunn. Dermed kan man tidlig oppdage feil som man ellers ikke ville funnet før etter kompilering. I F# er alle variabler i utgangspunktet uforanderlige. Hvis utvikleren ønsker det, kan dette omgås ved å bruke '''mutable''' nøkkelordet. === Hello World === En liten sammenligning av et [[Hello World]]-program i F# og et tilsvarende i OCaml, med kommentarer og variabeldeklarasjon: <syntaxhighlight lang="fsharp"> (* Dette er en kommentar og eksempel i F# *) let variabel = "Hello World" printfn "%s" variabel </syntaxhighlight> <syntaxhighlight lang="ocaml"> (* Dette er en kommentar og eksempel i OCaml*) let variabel = "Hello world" print_string variabel </syntaxhighlight> === Currying === Både variabler og funksjoner er verdier i F#. Dette gjør at man kan bruke ufullstendige funksjoner og [[currying]] på funksjoner. Et lite eksempel på currying i F#: <syntaxhighlight lang="fsharp"> open System.Windows.Forms let msgbox tittel innhold = MessageBox.Show(innhold, tittel) let delvisMsgBox = msgbox "Dette er tittelen" delvisMsgBox "Dette er innholdet" </syntaxhighlight> === Lat evaluering === Som standard blir F# lest og evaluert fra topp til bunn, men ved å bruke '''lazy'''-nøkkelordet kan man bruke lat evaluering, slik at koden ikke blir evaluert før man absolutt vil det. Et eksempel på nytten av lat evaluering kan være hvis man ønsker å kalkulere store tall som man ikke vil bruke tid og prosessorkraft på før det faktisk trengs. Siden F# blir lest fra topp til bunn, vil første eksempel i koden nedenfor feile. fordi Først evalueres ''createDir'', som oppretter mappen "Mappenavn", deretter vil den igjen prøve å skape den samme mappen når if-uttrykket blir evaluert som sant. I det neste eksemplet blir ikke funksjonen ''createDir'' evaluert og mappen opprettet før if-uttrykket blir evaluert som sant i den tredje kodelinjen. <syntaxhighlight lang="fsharp"> (** Med ivrig evaluering **) let skalOpprette = true let createDir = Directory.CreateDirectory(@"C:\Mappenavn") if skalOpprette then createDir else failwith "Ikke opprettet" </syntaxhighlight> <syntaxhighlight lang="fsharp"> (** Med lat evaluering **) let skalOpprette = true let createDir = lazy( Directory.CreateDirectory(@"C:\Mappenavn") ) if skalOpprette then createDir.Force() else failwith "Ikke opprettet" </syntaxhighlight> == Eksterne lenker == * {{Offisielt nettsted}} * [http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/ Microsoft Research's nettside for F#] * [http://msdn.microsoft.com/en-us/fsharp/default.aspx Microsoft F# Developer Center] * [http://blogs.msdn.com/dsyme Don Syme's blog, en nøkkelkilde for F#] * [http://feedproxy.google.com/planet_fsharp Planet F#] {{Wayback|url=http://feedproxy.google.com/planet_fsharp |date=20090213202656 }} * [http://www.ctocorner.com/fsharp/book The F# Survival Guide, Dec 2009 (Nettbasert bok)] * [http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html The F# 2.0 Spesifikasjon] * [http://www.simple-talk.com/opinion/geek-of-the-week/don-syme-geek-of-the-week/ Intervju med Don Syme] {{programmeringsspråk}} {{Autoritetsdata}} [[Kategori:Programmeringsspråk]]
Redigeringsforklaring:
Merk at alle bidrag til Wikisida.no anses som frigitt under Creative Commons Navngivelse-DelPåSammeVilkår (se
Wikisida.no:Opphavsrett
for detaljer). Om du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.
Du lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.
Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!
Avbryt
Redigeringshjelp
(åpnes i et nytt vindu)
Maler som brukes på denne siden:
Mal:Amboks
(
rediger
)
Mal:Autoritetsdata
(
rediger
)
Mal:Bilde fra Wikidata
(
rediger
)
Mal:Denne
(
rediger
)
Mal:Hattnotis
(
rediger
)
Mal:Hlist/styles.css
(
rediger
)
Mal:Infoboks/styles.css
(
rediger
)
Mal:Infoboks bilde
(
rediger
)
Mal:Infoboks dobbeltrad
(
rediger
)
Mal:Infoboks overskrift
(
rediger
)
Mal:Infoboks programmeringsspråk
(
rediger
)
Mal:Infoboks rad
(
rediger
)
Mal:Infoboks slutt
(
rediger
)
Mal:Infoboks start
(
rediger
)
Mal:Navboks
(
rediger
)
Mal:Offisielle lenker
(
rediger
)
Mal:Offisielt nettsted
(
rediger
)
Mal:Omhandler
(
rediger
)
Mal:Programmeringsspråk
(
rediger
)
Mal:Referanseløs
(
rediger
)
Mal:Wayback
(
rediger
)
Modul:Arguments
(
rediger
)
Modul:External links
(
rediger
)
Modul:External links/conf
(
rediger
)
Modul:External links/conf/Autoritetsdata
(
rediger
)
Modul:External links/conf/Offisielle lenker
(
rediger
)
Modul:Genitiv
(
rediger
)
Modul:Message box
(
rediger
)
Modul:Message box/ambox.css
(
rediger
)
Modul:Message box/configuration
(
rediger
)
Modul:Navbar
(
rediger
)
Modul:Navbar/configuration
(
rediger
)
Modul:Navboks
(
rediger
)
Modul:Navbox/configuration
(
rediger
)
Modul:Navbox/styles.css
(
rediger
)
Modul:Reference score
(
rediger
)
Modul:Reference score/conf
(
rediger
)
Modul:Reference score/i18n
(
rediger
)
Modul:String
(
rediger
)
Modul:Wayback
(
rediger
)
Modul:Wikidata2
(
rediger
)
Modul:WikidataBilde
(
rediger
)
Modul:WikidataDato
(
rediger
)
Modul:Yesno
(
rediger
)
Denne siden er medlem av 3 skjulte kategorier:
Kategori:Artikler med offisielle lenker og uten kobling til Wikidata
Kategori:Artikler uten offisielle lenker fra Wikidata
Kategori:Artikler uten referanser
Navigasjonsmeny
Personlige verktøy
Ikke logget inn
Brukerdiskusjon
Bidrag
Opprett konto
Logg inn
Navnerom
Side
Diskusjon
norsk bokmål
Visninger
Les
Rediger
Rediger kilde
Vis historikk
Mer
Navigasjon
Forside
Siste endringer
Tilfeldig side
Hjelp til MediaWiki
Verktøy
Lenker hit
Relaterte endringer
Spesialsider
Sideinformasjon