1
0
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:
Mustafa Zengin
2016-04-25 19:22:56 -07:00
parent 67a867ac0a
commit 71cf39f9c2

View File

@@ -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!")