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