mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-08-06 23:06:49 +02:00
translation within the code
This commit is contained in:
@@ -33,84 +33,84 @@ Aşağıdaki kodu denemek istiyorsanız, [tryfsharp.org](http://www.tryfsharp.or
|
|||||||
// "let" anahtar kelimesi (değişmez) değer tanımlar
|
// "let" anahtar kelimesi (değişmez) değer tanımlar
|
||||||
let myInt = 5
|
let myInt = 5
|
||||||
let myFloat = 3.14
|
let myFloat = 3.14
|
||||||
let myString = "hello" // tip bilgisi olmamasına dikkat
|
let myString = "merhaba" // tip bilgisi olmamasına dikkat
|
||||||
|
|
||||||
// ------ Listeler ------
|
// ------ Listeler ------
|
||||||
let twoToFive = [2; 3; 4; 5] // Köşeli parantezler listeleri oluşturur,
|
let ikidenBese = [2; 3; 4; 5] // Köşeli parantezler listeleri oluşturur,
|
||||||
// değerler ise noktalı virgülle ayrılır.
|
// değerler ise noktalı virgülle ayrılır.
|
||||||
let oneToFive = 1 :: twoToFive // :: yeni birinci elemanı olan bir liste oluşturur.
|
let birdenBese = 1 :: ikidenBese // :: yeni birinci elemanı olan bir liste oluşturur.
|
||||||
// Sonuç: [1; 2; 3; 4; 5]
|
// Sonuç: [1; 2; 3; 4; 5]
|
||||||
let zeroToFive = [0; 1] @ twoToFive // @ iki listeyi birbirine ekler.
|
let sifirdanBese = [0; 1] @ ikidenBese // @ iki listeyi birbirine ekler.
|
||||||
|
|
||||||
// ÖNEMLİ: virgüller hiçbir zaman ayraç olarak kullanılmaz, sadece noktalı virgüller!
|
// ÖNEMLİ: virgüller hiçbir zaman ayraç olarak kullanılmaz, sadece noktalı virgüller!
|
||||||
|
|
||||||
// ------ Fonksiyonlar ------
|
// ------ Fonksiyonlar ------
|
||||||
// "let" anahtar kelimesi isimlendirilmiş fonksiyonları da tanımlar.
|
// "let" anahtar kelimesi isimlendirilmiş fonksiyonları da tanımlar.
|
||||||
let square x = x * x // Parantez kullanılmadığına dikkat.
|
let kare x = x * x // Parantez kullanılmadığına dikkat.
|
||||||
square 3 // Şimdi fonksiyonu uygula. Yine parantez yok.
|
kare 3 // Şimdi fonksiyonu uygula. Yine parantez yok.
|
||||||
|
|
||||||
let add x y = x + y // add (x,y) kullanmayın! Bu tamamen başka bir anlama geliyor.
|
let topla x y = x + y // topla (x,y) kullanmayın! Bu tamamen başka bir anlama geliyor.
|
||||||
add 2 3 // Şimdi fonksiyonu uygula.
|
topla 2 3 // Şimdi fonksiyonu uygula.
|
||||||
|
|
||||||
// çok satırlı bir fonksiyon tanımlamak için sadece girinti kullan. Noktalıı virgül gerekmez.
|
// çok satırlı bir fonksiyon tanımlamak için sadece girinti kullan. Noktalıı virgül gerekmez.
|
||||||
let evens list =
|
let ciftler liste =
|
||||||
let isEven x = x % 2 = 0 // "isEven"ı alt fonksiyon olarak tanımla
|
let ciftMi x = x % 2 = 0 // "ciftMi"yi alt fonksiyon olarak tanımla
|
||||||
List.filter isEven list // List.filter boolean bir fonksiyon ve
|
List.filter ciftMi liste // List.filter boolean bir fonksiyon ve
|
||||||
// üzerinde çalışılacak bir liste parametrelerinden oluşan
|
// üzerinde çalışılacak bir liste parametrelerinden oluşan
|
||||||
// bir kütüphane fonksiyonu
|
// bir kütüphane fonksiyonu
|
||||||
|
|
||||||
evens oneToFive // Şimdi fonksiyonu uygula.
|
evens birdenBese // Şimdi fonksiyonu uygula.
|
||||||
|
|
||||||
// Parantezleri önceliği netleştirmek için kullanabilirsin. Bu örnekte
|
// Parantezleri önceliği netleştirmek için kullanabilirsin. Bu örnekte
|
||||||
// "map"i önce iki argümanla uygula, sonra sonuç üzerinde "sum" uygula.
|
// "map"i önce iki argümanla uygula, sonra sonuç üzerinde "ekle" uygula.
|
||||||
// Parantezler olmasaydı, "List.map" List.sum'ın ilk argümanı olurdu.
|
// Parantezler olmasaydı, "List.map" List.ekle'ın ilk argümanı olurdu.
|
||||||
let sumOfSquaresTo100 =
|
let yuzeKadarKarelerinToplami =
|
||||||
List.sum ( List.map square [1..100] )
|
List.ekle ( List.map kare [1..100] )
|
||||||
|
|
||||||
// Bir operasyonun sonucunu bir sonrakine "|>" kullanarak besleyebilirsin.
|
// Bir operasyonun sonucunu bir sonrakine "|>" kullanarak besleyebilirsin.
|
||||||
// Veri beslemek F#'ta UNIX'te olduğu gibi yaygındır..
|
// Veri beslemek F#'ta UNIX'te olduğu gibi yaygındır..
|
||||||
|
|
||||||
// Burada sumOfSquares fonksiyonunun veri beslemeyle yazılmış hali var:
|
// Burada karelerToplami fonksiyonunun veri beslemeyle yazılmış hali var:
|
||||||
let sumOfSquaresTo100piped =
|
let veriBeslemeyleYuzeKadarKarelerinToplami =
|
||||||
[1..100] |> List.map square |> List.sum // "square" önceden tanımlanmıştı
|
[1..100] |> List.map kare |> List.ekle // "kare" önceden tanımlanmıştı
|
||||||
|
|
||||||
// Lambda'ları (anonim fonksiyonları) "fun" anahtar kelimesiyle tanımlayabilirsin
|
// Lambda'ları (anonim fonksiyonları) "fun" anahtar kelimesiyle tanımlayabilirsin
|
||||||
let sumOfSquaresTo100withFun =
|
let funlaYuzeKadarKarelerinToplami =
|
||||||
[1..100] |> List.map (fun x -> x * x) |> List.sum
|
[1..100] |> List.map (fun x -> x * x) |> List.ekle
|
||||||
|
|
||||||
// F#'ta "return" anahtar kelimesi yoktur. Bir fonksiyon
|
// F#'ta "return" anahtar kelimesi yoktur. Bir fonksiyon
|
||||||
// her zaman son kullanılan ifadeyi döndürür.
|
// her zaman son kullanılan ifadeyi döndürür.
|
||||||
|
|
||||||
// ------ Kalıp eşleştirme ------
|
// ------ Kalıp eşleştirme ------
|
||||||
// Match..with.. çok güçlü bir case/switch türevidir.
|
// Match..with.. çok güçlü bir case/switch türevidir.
|
||||||
let simplePatternMatch =
|
let basitKalipEslestirme =
|
||||||
let x = "a"
|
let x = "a"
|
||||||
match x with
|
match x with
|
||||||
| "a" -> printfn "x is a"
|
| "a" -> printfn "x a'dır"
|
||||||
| "b" -> printfn "x is b"
|
| "b" -> printfn "x b'dir"
|
||||||
| _ -> printfn "x is something else" // alt çizgi bütün kalıplarla eşleşir
|
| _ -> printfn "x başka bir şeydir" // alt çizgi bütün kalıplarla eşleşir
|
||||||
|
|
||||||
// F# varsayılan olarak null'lara izin vermez -- Option tipini kullanıp
|
// F# varsayılan olarak null'lara izin vermez -- Option tipini kullanıp
|
||||||
// kalıp eşleştirme yapmalısın.
|
// kalıp eşleştirme yapmalısın.
|
||||||
// Some(..) ve None, Nullable tipler gibidir.
|
// Some(..) ve None, Nullable tipler gibidir.
|
||||||
let validValue = Some(99)
|
let gecerliDeger = Some(99)
|
||||||
let invalidValue = None
|
let gecersizDeger = None
|
||||||
|
|
||||||
// Bu örnekte, match..with "Some" ve "None"la eşleştirme yapıyor,
|
// Bu örnekte, match..with "Some" ve "None"la eşleştirme yapıyor,
|
||||||
// ve ayrıca "Some" içerisindeki değeri de çıkarıyor.
|
// ve ayrıca "Some" içerisindeki değeri de çıkarıyor.
|
||||||
let optionPatternMatch input =
|
let optionKalipEslestirme input =
|
||||||
match input with
|
match input with
|
||||||
| Some i -> printfn "input is an int=%d" i
|
| Some i -> printfn "input is an int=%d" i
|
||||||
| None -> printfn "input is missing"
|
| None -> printfn "input is missing"
|
||||||
|
|
||||||
optionPatternMatch validValue
|
optionKalipEslestirme gecerliDeger
|
||||||
optionPatternMatch invalidValue
|
optionKalipEslestirme gecersizDeger
|
||||||
|
|
||||||
// ------ Yazdırma ------
|
// ------ Yazdırma ------
|
||||||
// printf/printfn fonksiyonları C#'taki
|
// printf/printfn fonksiyonları C#'taki
|
||||||
// Console.Write/WriteLine fonksiyonlarına benzer.
|
// Console.Write/WriteLine fonksiyonlarına benzer.
|
||||||
printfn "Printing an int %i, a float %f, a bool %b" 1 2.0 true
|
printfn "Bir int %i, bir ondalık %f, bir boolean %b yazdırma" 1 2.0 true
|
||||||
printfn "A string %s, and something generic %A" "hello" [1; 2; 3; 4]
|
printfn "Bir string %s, ve jenerik bir tip %A" "hello" [1; 2; 3; 4]
|
||||||
|
|
||||||
// sprintf/sprintfn fonksiyonları ise veriyi string'e
|
// sprintf/sprintfn fonksiyonları ise veriyi string'e
|
||||||
// çevirmek içindir, C#'taki String.Format gibi.
|
// çevirmek içindir, C#'taki String.Format gibi.
|
||||||
@@ -125,33 +125,33 @@ printfn "A string %s, and something generic %A" "hello" [1; 2; 3; 4]
|
|||||||
|
|
||||||
// Modüller fonksiyonları gruplamak için kullanılır.
|
// Modüller fonksiyonları gruplamak için kullanılır.
|
||||||
// Her bir modül için girinti gerekir.
|
// Her bir modül için girinti gerekir.
|
||||||
module FunctionExamples =
|
module FonksiyonOrnekleri =
|
||||||
|
|
||||||
// Temel bir ekleme fonksiyonu tanımla
|
// Temel bir ekleme fonksiyonu tanımla
|
||||||
let add x y = x + y
|
let topla x y = x + y
|
||||||
|
|
||||||
// Bir fonksiyonun temel kullanımı
|
// Bir fonksiyonun temel kullanımı
|
||||||
let a = add 1 2
|
let a = topla 1 2
|
||||||
printfn "1 + 2 = %i" a
|
printfn "1 + 2 = %i" a
|
||||||
|
|
||||||
// Parametreleri kaynaklamak için parçalı uygulama
|
// Parametreleri kaynaklamak için parçalı uygulama
|
||||||
let add42 = add 42
|
let kirkIkiEkle = topla 42
|
||||||
let b = add42 1
|
let b = kirkIkiEkle 1
|
||||||
printfn "42 + 1 = %i" b
|
printfn "42 + 1 = %i" b
|
||||||
|
|
||||||
// Fonksiyonları birleştirmek için kompozisyon
|
// Fonksiyonları birleştirmek için kompozisyon
|
||||||
let add1 = add 1
|
let birEkle = topla 1
|
||||||
let add2 = add 2
|
let ikiEkle = topla 2
|
||||||
let add3 = add1 >> add2
|
let ucEkle = birEkle >> ikiEkle
|
||||||
let c = add3 7
|
let c = ucEkle 7
|
||||||
printfn "3 + 7 = %i" c
|
printfn "3 + 7 = %i" c
|
||||||
|
|
||||||
// Yüksek dereceli fonksiyonlar
|
// Yüksek dereceli fonksiyonlar
|
||||||
[1..10] |> List.map add3 |> printfn "new list is %A"
|
[1..10] |> List.map ucEkle |> printfn "yeni liste: %A"
|
||||||
|
|
||||||
// Fonksiyonlar listesi ve dahası
|
// Fonksiyonlar listesi ve dahası
|
||||||
let add6 = [add1; add2; add3] |> List.reduce (>>)
|
let altiEkle = [birEkle; ikiEkle; ucEkle] |> List.reduce (>>)
|
||||||
let d = add6 7
|
let d = altiEkle 7
|
||||||
printfn "1 + 2 + 3 + 7 = %i" d
|
printfn "1 + 2 + 3 + 7 = %i" d
|
||||||
|
|
||||||
// ================================================
|
// ================================================
|
||||||
@@ -169,27 +169,27 @@ module FunctionExamples =
|
|||||||
module ListExamples =
|
module ListExamples =
|
||||||
|
|
||||||
// listeler köşeli parantez kullanır
|
// listeler köşeli parantez kullanır
|
||||||
let list1 = ["a"; "b"]
|
let liste1 = ["a"; "b"]
|
||||||
let list2 = "c" :: list1 // :: başa eleman ekler
|
let liste2 = "c" :: liste1 // :: başa eleman ekler
|
||||||
let list3 = list1 @ list2 // @ listeleri birbirine ekler
|
let liste3 = liste1 @ liste2 // @ listeleri birbirine ekler
|
||||||
|
|
||||||
// Liste comprehension'ları (jeneratörler olarak da bilinir)
|
// Liste comprehension'ları (jeneratörler olarak da bilinir)
|
||||||
let squares = [for i in 1..10 do yield i * i]
|
let kareler = [for i in 1..10 do yield i * i]
|
||||||
|
|
||||||
// asal sayı jeneratörü
|
// asal sayı jeneratörü
|
||||||
let rec sieve = function
|
let rec elek = function
|
||||||
| (p::xs) -> p :: sieve [ for x in xs do if x % p > 0 then yield x ]
|
| (p::xler) -> p :: elek [ for x in xler do if x % p > 0 then yield x ]
|
||||||
| [] -> []
|
| [] -> []
|
||||||
let primes = sieve [2..50]
|
let asallar = elek [2..50]
|
||||||
printfn "%A" primes
|
printfn "%A" asallar
|
||||||
|
|
||||||
// Listelerle kalıp eşleştirme
|
// Listelerle kalıp eşleştirme
|
||||||
let listMatcher aList =
|
let listMatcher liste =
|
||||||
match aList with
|
match liste with
|
||||||
| [] -> printfn "the list is empty"
|
| [] -> printfn "liste boş"
|
||||||
| [first] -> printfn "the list has one element %A " first
|
| [birinci] -> printfn "listede sadece bir eleman var: %A " birinci
|
||||||
| [first; second] -> printfn "list is %A and %A" first second
|
| [birinci; ikinci] -> printfn "liste: %A ve %A" birinci ikinci
|
||||||
| _ -> printfn "the list has more than two elements"
|
| _ -> printfn "listede ikiden fazla eleman var"
|
||||||
|
|
||||||
listMatcher [1; 2; 3; 4]
|
listMatcher [1; 2; 3; 4]
|
||||||
listMatcher [1; 2]
|
listMatcher [1; 2]
|
||||||
@@ -197,58 +197,58 @@ module ListExamples =
|
|||||||
listMatcher []
|
listMatcher []
|
||||||
|
|
||||||
// Listeleri kullanarak recursion
|
// Listeleri kullanarak recursion
|
||||||
let rec sum aList =
|
let rec ekle liste =
|
||||||
match aList with
|
match liste with
|
||||||
| [] -> 0
|
| [] -> 0
|
||||||
| x::xs -> x + sum xs
|
| x::xler -> x + ekle xler
|
||||||
sum [1..10]
|
ekle [1..10]
|
||||||
|
|
||||||
// -----------------------------------------
|
// -----------------------------------------
|
||||||
// Standart kütüphane fonksiyonları
|
// Standart kütüphane fonksiyonları
|
||||||
// -----------------------------------------
|
// -----------------------------------------
|
||||||
|
|
||||||
// map
|
// map
|
||||||
let add3 x = x + 3
|
let ucEkle x = x + 3
|
||||||
[1..10] |> List.map add3
|
[1..10] |> List.map ucEkle
|
||||||
|
|
||||||
// filter
|
// filter
|
||||||
let even x = x % 2 = 0
|
let cift x = x % 2 = 0
|
||||||
[1..10] |> List.filter even
|
[1..10] |> List.filter cift
|
||||||
|
|
||||||
// ve dahası -- dökümantasyonu bakınız
|
// ve dahası -- dökümantasyona bakınız
|
||||||
|
|
||||||
module ArrayExamples =
|
module DiziOrnekleri =
|
||||||
|
|
||||||
// Diziler köşeli parantezle birlikte çubuk karakterini kullanır
|
// Diziler köşeli parantezle birlikte çubuk karakterini kullanır
|
||||||
let array1 = [| "a"; "b" |]
|
let dizi1 = [| "a"; "b" |]
|
||||||
let first = array1.[0] // nokta kullanarak indeks erişimi
|
let birinci = dizi1.[0] // nokta kullanarak indeks erişimi
|
||||||
|
|
||||||
// Diziler için kalıp eşleştirme listlerle aynıdır
|
// Diziler için kalıp eşleştirme listlerle aynıdır
|
||||||
let arrayMatcher aList =
|
let diziEslestirici liste =
|
||||||
match aList with
|
match liste with
|
||||||
| [| |] -> printfn "the array is empty"
|
| [| |] -> printfn "dizi boş"
|
||||||
| [| first |] -> printfn "the array has one element %A " first
|
| [| birinci |] -> printfn "dizide sadece bir eleman var: %A " birinci
|
||||||
| [| first; second |] -> printfn "array is %A and %A" first second
|
| [| birinci; ikinci |] -> printfn "dizi: %A ve %A" birinci ikinci
|
||||||
| _ -> printfn "the array has more than two elements"
|
| _ -> printfn "dizide ikiden fazla eleman var"
|
||||||
|
|
||||||
arrayMatcher [| 1; 2; 3; 4 |]
|
diziEslestirici [| 1; 2; 3; 4 |]
|
||||||
|
|
||||||
// Listede olduğu gibi kütüphane fonksiyonları
|
// Listede olduğu gibi kütüphane fonksiyonları
|
||||||
|
|
||||||
[| 1..10 |]
|
[| 1..10 |]
|
||||||
|> Array.map (fun i -> i + 3)
|
|> Array.map (fun i -> i + 3)
|
||||||
|> Array.filter (fun i -> i % 2 = 0)
|
|> Array.filter (fun i -> i % 2 = 0)
|
||||||
|> Array.iter (printfn "value is %i. ")
|
|> Array.iter (printfn "değer: %i. ")
|
||||||
|
|
||||||
|
|
||||||
module SequenceExamples =
|
module SeriOrnekleri =
|
||||||
|
|
||||||
// seriler kıvrık parantez kullanır
|
// seriler kıvrık parantez kullanır
|
||||||
let seq1 = seq { yield "a"; yield "b" }
|
let seri1 = seq { yield "a"; yield "b" }
|
||||||
|
|
||||||
// seriler yield'ı kullanabilir
|
// seriler yield'ı kullanabilir
|
||||||
// ve alt seriler barındırabilir
|
// ve alt seriler barındırabilir
|
||||||
let strange = seq {
|
let garip = seq {
|
||||||
// "yield" bir eleman ekliyor
|
// "yield" bir eleman ekliyor
|
||||||
yield 1; yield 2;
|
yield 1; yield 2;
|
||||||
|
|
||||||
@@ -258,47 +258,47 @@ module SequenceExamples =
|
|||||||
for i in 1..10 do
|
for i in 1..10 do
|
||||||
if i % 2 = 0 then yield i }}
|
if i % 2 = 0 then yield i }}
|
||||||
// test
|
// test
|
||||||
strange |> Seq.toList
|
garip |> Seq.toList
|
||||||
|
|
||||||
|
|
||||||
// Seriler "unfold" kullanılarak oluşturulabilir
|
// Seriler "unfold" kullanılarak oluşturulabilir
|
||||||
// Fibonacci serisi örneği
|
// Fibonacci serisi örneği
|
||||||
let fib = Seq.unfold (fun (fst,snd) ->
|
let fib = Seq.unfold (fun (birinci,ikinci) ->
|
||||||
Some(fst + snd, (snd, fst + snd))) (0,1)
|
Some(birinci + ikinci, (ikinci, birinci + ikinci))) (0,1)
|
||||||
|
|
||||||
// test
|
// test
|
||||||
let fib10 = fib |> Seq.take 10 |> Seq.toList
|
let fib10 = fib |> Seq.take 10 |> Seq.toList
|
||||||
printf "first 10 fibs are %A" fib10
|
printf "ilk 10 fibonacci sayısı: %A" fib10
|
||||||
|
|
||||||
|
|
||||||
// ================================================
|
// ================================================
|
||||||
// Veri Tipleri
|
// Veri Tipleri
|
||||||
// ================================================
|
// ================================================
|
||||||
|
|
||||||
module DataTypeExamples =
|
module VeriTipiOrnekleri =
|
||||||
|
|
||||||
// Bütün veriler varsayılan olarak değiştirilemezdir.
|
// Bütün veriler varsayılan olarak değiştirilemezdir.
|
||||||
|
|
||||||
// Tuple'lar çabuk ve kolay anonim tiplerdir.
|
// Tuple'lar çabuk ve kolay anonim tiplerdir.
|
||||||
// -- Tuple oluşturmak için virgül kullan
|
|
||||||
let twoTuple = 1, 2
|
|
||||||
let threeTuple = "a", 2, true
|
|
||||||
|
|
||||||
// paketi açmak için kalıp eşleştirme kullan
|
// paketi açmak için kalıp eşleştirme kullan
|
||||||
let x, y = twoTuple // x = 1, y = 2
|
let x, y = ikiliTuple // x = 1, y = 2
|
||||||
|
|
||||||
|
// -- Tuple oluşturmak için virgül kullan
|
||||||
|
let ikiliTuple = 1, 2
|
||||||
|
let ucluTuple = "a", 2, true
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// Record tipi isimlendirilmiş alanlara sahiptir
|
// Record tipi isimlendirilmiş alanlara sahiptir
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
|
|
||||||
// "type" ile kıvrık parantezleri record tipi oluşturmak için kullan
|
// "type" ile kıvrık parantezleri record tipi oluşturmak için kullan
|
||||||
type Person = {First:string; Last:string}
|
type Kisi = {birinci:string; Last:string}
|
||||||
|
|
||||||
// "let" ile kıvrık parantezi record tipi oluşturmak için kullan
|
// "let" ile kıvrık parantezi record tipi oluşturmak için kullan
|
||||||
let person1 = {First="John"; Last="Doe"}
|
let kisi1 = {birinci="John"; Last="Doe"}
|
||||||
|
|
||||||
// paketi açmak için kalıp eşleştirme kullan
|
// paketi açmak için kalıp eşleştirme kullan
|
||||||
let {First = first} = person1 // first="John"
|
let {birinci = birinci} = kisi1 // birinci="John"
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// Union tipleri (değişkenler olarak da bilinir) birden fazla
|
// Union tipleri (değişkenler olarak da bilinir) birden fazla
|
||||||
@@ -306,21 +306,21 @@ module DataTypeExamples =
|
|||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
|
|
||||||
// "type" ile çubuk karakterini union tipi tanımlamak için kullan
|
// "type" ile çubuk karakterini union tipi tanımlamak için kullan
|
||||||
type Temp =
|
type Derece =
|
||||||
| DegreesC of float
|
| Santigrat of float
|
||||||
| DegreesF of float
|
| Fahrenhayt of float
|
||||||
|
|
||||||
// Seçeneklerden birini kullan
|
// Seçeneklerden birini kullan
|
||||||
let temp1 = DegreesF 98.6
|
let derece1 = Fahrenhayt 98.6
|
||||||
let temp2 = DegreesC 37.0
|
let derece2 = Santigrat 37.0
|
||||||
|
|
||||||
// Paketi açmak için bütün seçenekler üzerinde kalıp eşleştirme kullan
|
// Paketi açmak için bütün seçenekler üzerinde kalıp eşleştirme kullan
|
||||||
let printTemp = function
|
let dereceYazdir = function
|
||||||
| DegreesC t -> printfn "%f degC" t
|
| Santigrat t -> printfn "%f C" t
|
||||||
| DegreesF t -> printfn "%f degF" t
|
| Fahrenhayt t -> printfn "%f F" t
|
||||||
|
|
||||||
printTemp temp1
|
dereceYazdir derece1
|
||||||
printTemp temp2
|
dereceYazdir derece2
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// Yinelgen (Recursive) tipler
|
// Yinelgen (Recursive) tipler
|
||||||
@@ -328,40 +328,40 @@ module DataTypeExamples =
|
|||||||
|
|
||||||
// Tipler alt sınıflar oluşturmadan karmaşık şekillerde
|
// Tipler alt sınıflar oluşturmadan karmaşık şekillerde
|
||||||
// yinelgen olarak birleştirilebilirler.
|
// yinelgen olarak birleştirilebilirler.
|
||||||
type Employee =
|
type Calisan =
|
||||||
| Worker of Person
|
| Isci of Kisi
|
||||||
| Manager of Employee list
|
| Yonetici of Calisan liste
|
||||||
|
|
||||||
let jdoe = {First="John"; Last="Doe"}
|
let falancaKisi = {birinci="John"; Last="Doe"}
|
||||||
let worker = Worker jdoe
|
let isci = Isci falancaKisi
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// Tipleri Kullanarak Modelleme
|
// Tipleri Kullanarak Modelleme
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
|
|
||||||
// Union tipleri bayrak kullanmadan durum modelleme için harikadır.
|
// Union tipleri bayrak kullanmadan durum modelleme için harikadır.
|
||||||
type EmailAddress =
|
type EpostaAdresi =
|
||||||
| ValidEmailAddress of string
|
| GecerliEpostaAdresi of string
|
||||||
| InvalidEmailAddress of string
|
| GecersizEpostaAdresi of string
|
||||||
|
|
||||||
let trySendEmail email =
|
let epostaGondermeyiDene eposta =
|
||||||
match email with // kalıp eşleştirme kullan
|
match eposta with // kalıp eşleştirme kullan
|
||||||
| ValidEmailAddress address -> () // gönder
|
| GecerliEpostaAdresi adres -> () // gönder
|
||||||
| InvalidEmailAddress address -> () // gönderme
|
| GecersizEpostaAdresi adres -> () // gönderme
|
||||||
|
|
||||||
// Union tiplerin record tiplerle birleşimi
|
// Union tiplerin record tiplerle birleşimi
|
||||||
// domain driven design için iyi bir temel oluşturur.
|
// domain driven design için iyi bir temel oluşturur.
|
||||||
// Domain'i yansıtan yüzlerce ufak tip oluşturabilirsiniz.
|
// Domain'i yansıtan yüzlerce ufak tip oluşturabilirsiniz.
|
||||||
|
|
||||||
type CartItem = { ProductCode: string; Qty: int }
|
type Urun = { UrunKodu: string; Miktar: int }
|
||||||
type Payment = Payment of float
|
type Odeme = Odeme of float
|
||||||
type ActiveCartData = { UnpaidItems: CartItem list }
|
type AktifSepetVerisi = { OdenmemisUrunler: Urun liste }
|
||||||
type PaidCartData = { PaidItems: CartItem list; Payment: Payment}
|
type OndenmisSepetVerisi = { OdenmisUrunler: Urun liste; Odeme: Odeme}
|
||||||
|
|
||||||
type ShoppingCart =
|
type AlisverisSepeti =
|
||||||
| EmptyCart // veri yok
|
| BosSepet // veri yok
|
||||||
| ActiveCart of ActiveCartData
|
| AktifSepet of AktifSepetVerisi
|
||||||
| PaidCart of PaidCartData
|
| OdenmisSepet of OndenmisSepetVerisi
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// Tipler için içgüdüsel davranış
|
// Tipler için içgüdüsel davranış
|
||||||
@@ -375,29 +375,29 @@ module DataTypeExamples =
|
|||||||
// * Serialization
|
// * Serialization
|
||||||
|
|
||||||
// %A kullanarak yazdırma
|
// %A kullanarak yazdırma
|
||||||
printfn "twoTuple=%A,\nPerson=%A,\nTemp=%A,\nEmployee=%A"
|
printfn "ikiliTuple=%A,\nKisi=%A,\nDerece=%A,\nCalisan=%A"
|
||||||
twoTuple person1 temp1 worker
|
ikiliTuple kisi1 derece1 isci
|
||||||
|
|
||||||
// Eşitlik ve kıyaslama içgüdüseldir.
|
// Eşitlik ve kıyaslama içgüdüseldir.
|
||||||
// İskambil kartlarıyla bir örnek
|
// İskambil kartlarıyla bir örnek
|
||||||
type Suit = Club | Diamond | Spade | Heart
|
type Simge = Sinek | Karo | Maca | Kupa
|
||||||
type Rank = Two | Three | Four | Five | Six | Seven | Eight
|
type Sira = Iki | Uc | Dort | Bes | Alti | Yedi | Sekiz
|
||||||
| Nine | Ten | Jack | Queen | King | Ace
|
| Dokuz | On | Bacak | Kiz | Papaz | As
|
||||||
|
|
||||||
let hand = [ Club, Ace; Heart, Three; Heart, Ace;
|
let el = [ Sinek, As; Kupa, Uc; Kupa, As;
|
||||||
Spade, Jack; Diamond, Two; Diamond, Ace ]
|
Maca, Bacak; Karo, Iki; Karo, As ]
|
||||||
|
|
||||||
// Sıralama
|
// Sıralama
|
||||||
List.sort hand |> printfn "sorted hand is (low to high) %A"
|
List.sirala el |> printfn "artarak dizilen el: %A"
|
||||||
List.max hand |> printfn "high card is %A"
|
List.max el |> printfn "en yüksek kart: %A"
|
||||||
List.min hand |> printfn "low card is %A"
|
List.min el |> printfn "en düşük kart: %A"
|
||||||
|
|
||||||
|
|
||||||
// ================================================
|
// ================================================
|
||||||
// Aktif Kalıplar
|
// Aktif Kalıplar
|
||||||
// ================================================
|
// ================================================
|
||||||
|
|
||||||
module ActivePatternExamples =
|
module AktifKalipOrnekleri =
|
||||||
|
|
||||||
// F# "aktif kalıplar" denen bir kalıp eşleştirmeye sahiptir.
|
// F# "aktif kalıplar" denen bir kalıp eşleştirmeye sahiptir.
|
||||||
// Kalıplar dinamik bir şekilde tespit edilip eşleştirilebilir.
|
// Kalıplar dinamik bir şekilde tespit edilip eşleştirilebilir.
|
||||||
@@ -405,22 +405,22 @@ module ActivePatternExamples =
|
|||||||
// Aktif kalıplar için söz dizimi (| ... |) şeklindedir
|
// Aktif kalıplar için söz dizimi (| ... |) şeklindedir
|
||||||
|
|
||||||
// Örneğin, karakter tiplerini eşleyen bir "aktif" kalıp tanımlayın...
|
// Örneğin, karakter tiplerini eşleyen bir "aktif" kalıp tanımlayın...
|
||||||
let (|Digit|Letter|Whitespace|Other|) ch =
|
let (|Rakam|Harf|Bosluk|Diger|) karakter =
|
||||||
if System.Char.IsDigit(ch) then Digit
|
if System.Char.IsDigit(karakter) then Rakam
|
||||||
else if System.Char.IsLetter(ch) then Letter
|
else if System.Char.IsLetter(karakter) then Harf
|
||||||
else if System.Char.IsWhiteSpace(ch) then Whitespace
|
else if System.Char.IsWhiteSpace(karakter) then Bosluk
|
||||||
else Other
|
else Diger
|
||||||
|
|
||||||
// ... daha sonra eşleme mantığı çok daha net yapmak için bunu kullanın
|
// ... daha sonra eşleme mantığı çok daha net yapmak için bunu kullanın
|
||||||
let printChar ch =
|
let karakterYazdir karakter =
|
||||||
match ch with
|
match karakter with
|
||||||
| Digit -> printfn "%c is a Digit" ch
|
| Rakam -> printfn "%c bir rakamdır" karakter
|
||||||
| Letter -> printfn "%c is a Letter" ch
|
| Harf -> printfn "%c bir harftir" karakter
|
||||||
| Whitespace -> printfn "%c is a Whitespace" ch
|
| Bosluk -> printfn "%c bir boşluktur" karakter
|
||||||
| _ -> printfn "%c is something else" ch
|
| _ -> printfn "%c başka bir şeydir" karakter
|
||||||
|
|
||||||
// Bir liste yazdırma
|
// Bir liste yazdırma
|
||||||
['a'; 'b'; '1'; ' '; '-'; 'c'] |> List.iter printChar
|
['a'; 'b'; '1'; ' '; '-'; 'c'] |> List.iter karakterYazdir
|
||||||
|
|
||||||
// -----------------------------------
|
// -----------------------------------
|
||||||
// Aktif Kalıpları Kullanarak FizzBuzz
|
// Aktif Kalıpları Kullanarak FizzBuzz
|
||||||
@@ -428,15 +428,15 @@ module ActivePatternExamples =
|
|||||||
|
|
||||||
// Parçalı eşleşen kalıplar da oluşturabilirsiniz
|
// Parçalı eşleşen kalıplar da oluşturabilirsiniz
|
||||||
// Tanımda alt çizgi karakterini kullanın ve eşleşince Some döndürün.
|
// Tanımda alt çizgi karakterini kullanın ve eşleşince Some döndürün.
|
||||||
let (|MultOf3|_|) i = if i % 3 = 0 then Some MultOf3 else None
|
let (|UcunKati|_|) i = if i % 3 = 0 then Some UcunKati else None
|
||||||
let (|MultOf5|_|) i = if i % 5 = 0 then Some MultOf5 else None
|
let (|BesinKati|_|) i = if i % 5 = 0 then Some BesinKati else None
|
||||||
|
|
||||||
// Ana fonksiyon
|
// Ana fonksiyon
|
||||||
let fizzBuzz i =
|
let fizzBuzz i =
|
||||||
match i with
|
match i with
|
||||||
| MultOf3 & MultOf5 -> printf "FizzBuzz, "
|
| UcunKati & BesinKati -> printf "FizzBuzz, "
|
||||||
| MultOf3 -> printf "Fizz, "
|
| UcunKati -> printf "Fizz, "
|
||||||
| MultOf5 -> printf "Buzz, "
|
| BesinKati -> printf "Buzz, "
|
||||||
| _ -> printf "%i, " i
|
| _ -> printf "%i, " i
|
||||||
|
|
||||||
// test
|
// test
|
||||||
@@ -446,50 +446,50 @@ module ActivePatternExamples =
|
|||||||
// Sadelik
|
// Sadelik
|
||||||
// ================================================
|
// ================================================
|
||||||
|
|
||||||
module AlgorithmExamples =
|
module AlgoritmaOrnekleri =
|
||||||
|
|
||||||
// F#'ın sinyal/gürültü oranı yüksektir, dolayısıyla
|
// F#'ın sinyal/gürültü oranı yüksektir, dolayısıyla
|
||||||
// kod algoritmayla hemen hemen aynı görünür.
|
// kod algoritmayla hemen hemen aynı görünür.
|
||||||
|
|
||||||
// ------ Örnek: sumOfSquares fonksiyonunu tanımla ------
|
// ------ Örnek: karelerToplami fonksiyonunu tanımla ------
|
||||||
let sumOfSquares n =
|
let karelerToplami n =
|
||||||
[1..n] // 1) 1'den n'e kadar bütün sayıları al
|
[1..n] // 1) 1'den n'e kadar bütün sayıları al
|
||||||
|> List.map square // 2) hepsinin karesini al
|
|> List.map kare // 2) hepsinin karesini al
|
||||||
|> List.sum // 3) sonuçları topla
|
|> List.ekle // 3) sonuçları topla
|
||||||
|
|
||||||
// test
|
// test
|
||||||
sumOfSquares 100 |> printfn "Sum of squares = %A"
|
karelerToplami 100 |> printfn "kareler toplamı = %A"
|
||||||
|
|
||||||
// ------ Örnek: bir sıralama fonksiyonu tanımla ------
|
// ------ Örnek: bir sıralama fonksiyonu tanımla ------
|
||||||
let rec sort list =
|
let rec sirala liste =
|
||||||
match list with
|
match liste with
|
||||||
// Liste boşsa
|
// Liste boşsa
|
||||||
| [] ->
|
| [] ->
|
||||||
[] // boş listeyi döndür
|
[] // boş listeyi döndür
|
||||||
// Liste boş değilse
|
// Liste boş değilse
|
||||||
| firstElem::otherElements -> // İlk elemanı al
|
| ilkEleman::digerElemanlar -> // İlk elemanı al
|
||||||
let smallerElements = // Daha küçük elemanları
|
let kucukElemanlar = // Daha küçük elemanları
|
||||||
otherElements // diğerlerinden ayır
|
digerElemanlar // diğerlerinden ayır
|
||||||
|> List.filter (fun e -> e < firstElem)
|
|> List.filter (fun e -> e < ilkEleman)
|
||||||
|> sort // ve sırala
|
|> sirala // ve sırala
|
||||||
let largerElements = // Daha büyük elemanları
|
let buyukElemanlar = // Daha büyük elemanları
|
||||||
otherElements // diğerlerinden ayır
|
digerElemanlar // diğerlerinden ayır
|
||||||
|> List.filter (fun e -> e >= firstElem)
|
|> List.filter (fun e -> e >= ilkEleman)
|
||||||
|> sort // ve sırala
|
|> sirala // ve sırala
|
||||||
// 3 parçayı birbirine ekle ve listeyi döndür
|
// 3 parçayı birbirine ekle ve listeyi döndür
|
||||||
List.concat [smallerElements; [firstElem]; largerElements]
|
List.concat [kucukElemanlar; [ilkEleman]; buyukElemanlar]
|
||||||
|
|
||||||
// test
|
// test
|
||||||
sort [1; 5; 23; 18; 9; 1; 3] |> printfn "Sorted = %A"
|
sirala [1; 5; 23; 18; 9; 1; 3] |> printfn "Sırala = %A"
|
||||||
|
|
||||||
// ================================================
|
// ================================================
|
||||||
// Eşzamanlı olmayan kod
|
// Eşzamansız kod
|
||||||
// ================================================
|
// ================================================
|
||||||
|
|
||||||
module AsyncExample =
|
module EszamansizOrnegi =
|
||||||
|
|
||||||
// F# "pyramid of doom" durumuyla karşılaştırmayacak şekilde
|
// F# "pyramid of doom" durumuyla karşılaştırmayacak şekilde
|
||||||
// içgüdüsel eşzamanlı olmayan özelliklere sahiptir.
|
// içgüdüsel eşzamansız özelliklere sahiptir.
|
||||||
//
|
//
|
||||||
// Bir sonraki örnek bir web sayfasını paralel bir şekilde indirir.
|
// Bir sonraki örnek bir web sayfasını paralel bir şekilde indirir.
|
||||||
|
|
||||||
@@ -498,39 +498,39 @@ module AsyncExample =
|
|||||||
open System.IO
|
open System.IO
|
||||||
open Microsoft.FSharp.Control.CommonExtensions
|
open Microsoft.FSharp.Control.CommonExtensions
|
||||||
|
|
||||||
// İçeriği eşzamanlı olmayan bir şekilde getir
|
// İçeriği eşzamansız bir şekilde getir
|
||||||
let fetchUrlAsync url =
|
let eszamansizUrlGetir url =
|
||||||
async { // "async" anahtar kelimesi ve kıvrık parantez
|
async { // "async" anahtar kelimesi ve kıvrık parantez
|
||||||
// "async (eşzamanlı olmayan)" nesneyi oluşturur
|
// "async (eşzamansız)" nesneyi oluşturur
|
||||||
let req = WebRequest.Create(Uri(url))
|
let istek = WebRequest.Create(Uri(url))
|
||||||
use! resp = req.AsyncGetResponse()
|
use! cevap = istek.AsyncGetResponse()
|
||||||
// use! eşzamanlı olmayan atamadır
|
// use! eşzamansız atamadır
|
||||||
use stream = resp.GetResponseStream()
|
use akis = cevap.GetResponseStream()
|
||||||
// "use" kullanılan bloğun dışına çıkınca
|
// "use" kullanılan bloğun dışına çıkınca
|
||||||
// close()'u otomatik olarak tetikler
|
// close()'u otomatik olarak tetikler
|
||||||
use reader = new IO.StreamReader(stream)
|
use okuyucu = new IO.StreamReader(akis)
|
||||||
let html = reader.ReadToEnd()
|
let html = okuyucu.ReadToEnd()
|
||||||
printfn "finished downloading %s" url
|
printfn "İndirme tamamlandı: %s" url
|
||||||
}
|
}
|
||||||
|
|
||||||
// İndirmek için bir web sitesi listesi
|
// İndirmek için bir web sitesi listesi
|
||||||
let sites = ["http://www.bing.com";
|
let siteler = ["http://www.bing.com";
|
||||||
"http://www.google.com";
|
"http://www.google.com";
|
||||||
"http://www.microsoft.com";
|
"http://www.microsoft.com";
|
||||||
"http://www.amazon.com";
|
"http://www.amazon.com";
|
||||||
"http://www.yahoo.com"]
|
"http://www.yahoo.com"]
|
||||||
|
|
||||||
// İndir
|
// İndir
|
||||||
sites
|
siteler
|
||||||
|> List.map fetchUrlAsync // async görevlerden oluşan bir liste yap
|
|> List.map eszamansizUrlGetir // eşzamansız görevlerden oluşan bir liste yap
|
||||||
|> Async.Parallel // bu görevleri paralel çalışacak şekilde ayarla
|
|> Async.Parallel // bu görevleri paralel çalışacak şekilde ayarla
|
||||||
|> Async.RunSynchronously // başlat
|
|> Async.RunSynchronously // başlat
|
||||||
|
|
||||||
// ================================================
|
// ================================================
|
||||||
// .NET uyumluluğu
|
// .NET uyumluluğu
|
||||||
// ================================================
|
// ================================================
|
||||||
|
|
||||||
module NetCompatibilityExamples =
|
module NetUyumlulukOrnekleri =
|
||||||
|
|
||||||
// F#, C#'ın yapabildiği hemen herşeyi yapabilir,
|
// F#, C#'ın yapabildiği hemen herşeyi yapabilir,
|
||||||
// ve .NET ve Mono kütüphaneleriyle tereyağından kıl çeker gibi çalışır.
|
// ve .NET ve Mono kütüphaneleriyle tereyağından kıl çeker gibi çalışır.
|
||||||
@@ -548,14 +548,14 @@ module NetCompatibilityExamples =
|
|||||||
with member this.Dispose() = printfn "%s disposed" name }
|
with member this.Dispose() = printfn "%s disposed" name }
|
||||||
|
|
||||||
let useAndDisposeResources =
|
let useAndDisposeResources =
|
||||||
use r1 = makeResource "first resource"
|
use r1 = makeResource "birinci resource"
|
||||||
printfn "using first resource"
|
printfn "using birinci resource"
|
||||||
for i in [1..3] do
|
for i in [1..3] do
|
||||||
let resourceName = sprintf "\tinner resource %d" i
|
let resourceName = sprintf "\tinner resource %d" i
|
||||||
use temp = makeResource resourceName
|
use temp = makeResource resourceName
|
||||||
printfn "\tdo something with %s" resourceName
|
printfn "\tdo something with %s" resourceName
|
||||||
use r2 = makeResource "second resource"
|
use r2 = makeResource "ikinci resource"
|
||||||
printfn "using second resource"
|
printfn "using ikinci resource"
|
||||||
printfn "done."
|
printfn "done."
|
||||||
|
|
||||||
// ------- Nesne yönelimli kod -------
|
// ------- Nesne yönelimli kod -------
|
||||||
@@ -616,7 +616,7 @@ module NetCompatibilityExamples =
|
|||||||
|
|
||||||
// test
|
// test
|
||||||
let myButton = new MyButton()
|
let myButton = new MyButton()
|
||||||
myButton.OnClick.Add(fun (sender, arg) ->
|
myButton.OnClick.topla(fun (sender, arg) ->
|
||||||
printfn "Click event with arg=%O" arg)
|
printfn "Click event with arg=%O" arg)
|
||||||
|
|
||||||
myButton.TestEvent("Hello World!")
|
myButton.TestEvent("Hello World!")
|
||||||
|
Reference in New Issue
Block a user