From 5aa692f5f3bbfa7b79224748dcfd8ca5fba7a8bc Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 12 Feb 2016 11:42:25 -0800 Subject: brainfuck->bf --- tr-tr/bf-tr.html.markdown | 87 ++++++++++++++++++++++++++++++++++++++++ tr-tr/brainfuck-tr.html.markdown | 87 ---------------------------------------- 2 files changed, 87 insertions(+), 87 deletions(-) create mode 100644 tr-tr/bf-tr.html.markdown delete mode 100644 tr-tr/brainfuck-tr.html.markdown (limited to 'tr-tr') diff --git a/tr-tr/bf-tr.html.markdown b/tr-tr/bf-tr.html.markdown new file mode 100644 index 00000000..e7015cd0 --- /dev/null +++ b/tr-tr/bf-tr.html.markdown @@ -0,0 +1,87 @@ +--- +language: bf +filename: brainfuck-tr +contributors: + - ["Prajit Ramachandran", "http://prajitr.github.io"] +translators: + - ["Haydar KULEKCI", "http://scanf.info/"] +lang: tr-tr +--- + +Brainfuck (normalde brainfuck olarak bütün harfleri küçük olarak yazılır.) +son derece minimal bir programlama dilidir. (Sadece 8 komut) ve tamamen +Turing'dir. + +``` +"><+-.,[]" (tırnak iÅŸaretleri hariç) karakterleri dışındaki her karakter +gözardı edilir. + +Brainfuck 30,000 hücresi olan ve ilk deÄŸerleri sıfır olarak atanmış bir +dizidir. İşaretçi ilk hücreyi iÅŸaret eder. + +Sekiz komut vardır: ++ : Geçerli hücrenin deÄŸerini bir artırır. +- : Geçerli hücrenin deÄŸerini bir azaltır. +> : Veri iÅŸaretçisini bir sonraki hücreye hareket ettirir(saÄŸdaki hücreye). +< : Veri iÅŸaretçisini bir önceki hücreye hareket ettirir(soldaki hücreye). +. : Geçerli hücrenin ASCII deÄŸerini yazdırır (örn: 65 = 'A'). +, : Bir girdilik karakteri aktif hücre için okur. +[ : EÄŸer geçerli hücredeki deÄŸer sıfır ise, ]ifadesine atlar. + DiÄŸer durumlarda bir sonraki yönergeye geçer. +] : EÄŸer geçerli hücredeki deÄŸer sıfır ise, bir sonraki yönergeye geçer. + DiÄŸer durumlarda, [ ifadesine karşılık gelen yönergelere döner. + +[ ve ] bir while döngüsü oluÅŸturur. Açıkça, dengeli olmalıdırlar. + +Basit bir brainfuck programına göz atalım. + +++++++ [ > ++++++++++ < - ] > +++++ . + +Bu program 'A' karaterini ekrana basar. İlk olarak, #1'inci hücre 6'ya artırılır. +#1'inci hücre döngü için kullanılacaktır. Sonra, ([) döngüsüne girilir ve +#2'inci hücreye hareket edilir. #2'inci hücre 10 kez artırılır, #1'inci hücreye +geri dönülür. #1 hücresini bir azaltır. Bu döngü 6 kez gerçekleÅŸir. (Bu 6 kez +azaltmak demektir, #1 hücresi 0 deÄŸerini alır ve bu noktada ] ifadesini atlar). + +Bu noktada, biz #1 hücresindeyiz, deÄŸeri ÅŸu anda 0 ve #2 hücresinin deÄŸeri +60'tır. Biz #2 hücresine hareket diyoruz ve bu hücreyi 5 defa artırıyoruz. +#2'nin ÅŸu anki deÄŸeri 65 olur. Sonra #2 hücresinin ASCII karşılığını +yazdırıyoruz. 65 deÄŸerinin ASCII karşılığı 'A'dır. Ekrana 'A' yazılacaktır. + + +, [ > + < - ] > . + +Bu program kullanıcıdan bir girdi okur, ve karakteri bir diÄŸer hücreye yazdırır, +ve daha sonra aynı karakteri ekrana yazdırır. + +, ifadesi kullanıcıdan karakteri #1 hücresine okur. Sonra bir döngü +baÅŸlar. #2 hücresine hareket edilir, #2 hücresinin deÄŸeri bir artırılır, #1 +hücresine geri dönülür, ve #1 hücresinin deÄŸer bir azaltılır. Bu #1 hücresinin +deÄŸeri 0 olana kadar devam eder ve #2 hücresi #1'in eski deÄŸerini tutar. Çünkü +biz #1 hücresindeki verileri döngü süresince #2 hücresine taşıyoruz, ve sonunda +#2 hücresinin ASCII deÄŸerini yazdırıyoruz. + +BoÅŸluk karakteri sadece okunabilirliÄŸi artırmak içindir. AÅŸağıdaki gibi de +yazabilirsiniz. + +,[>+<-]>. + + +Bu uygulamanın ne yaptığına bakalım: + +,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >> + +Bu program 2 sayı alır, ve birbiri ile çarpar. + +Özetle, ilk olarak iki girdi alır. Sonra, #1 hücresinde ÅŸarta baÄŸlı harici bir +döngü baÅŸlar. Sonra #2 ye hareket edilir, ve içerde #2 hücresine baÄŸlı bir döngü +daha baÅŸlar ve #3 hücresinin deÄŸerini artırır. Ama, Bir problem vardır: iç +döngünün sonunda #2'inci hücrenin deÄŸeri 0 olacaktır. Bunu çözmek için #4 +hücresinin de deÄŸerini yükseltiyoruz, ve sonra #4 hücresinin deÄŸerini #2'ye +kopyalıyoruz. +``` + +İşte brainfuck. Zor deÄŸil deÄŸil mi? EÄŸlenmek için kendi programınızı +yazabilirsiniz, veya farklı bir dilde brainfuck yorumlayıcısı yazabilirsiniz. +Yorumlayıcı oldukça basittir, ama mazoÅŸist iseniz, brainfuck içerisinde bir +brainfuck yorumlayıcısı yazmayı deneyebilirsiniz. diff --git a/tr-tr/brainfuck-tr.html.markdown b/tr-tr/brainfuck-tr.html.markdown deleted file mode 100644 index bd842b17..00000000 --- a/tr-tr/brainfuck-tr.html.markdown +++ /dev/null @@ -1,87 +0,0 @@ ---- -language: brainfuck -filename: brainfuck-tr -contributors: - - ["Prajit Ramachandran", "http://prajitr.github.io"] -translators: - - ["Haydar KULEKCI", "http://scanf.info/"] -lang: tr-tr ---- - -Brainfuck (normalde brainfuck olarak bütün harfleri küçük olarak yazılır.) -son derece minimal bir programlama dilidir. (Sadece 8 komut) ve tamamen -Turing'dir. - -``` -"><+-.,[]" (tırnak iÅŸaretleri hariç) karakterleri dışındaki her karakter -gözardı edilir. - -Brainfuck 30,000 hücresi olan ve ilk deÄŸerleri sıfır olarak atanmış bir -dizidir. İşaretçi ilk hücreyi iÅŸaret eder. - -Sekiz komut vardır: -+ : Geçerli hücrenin deÄŸerini bir artırır. -- : Geçerli hücrenin deÄŸerini bir azaltır. -> : Veri iÅŸaretçisini bir sonraki hücreye hareket ettirir(saÄŸdaki hücreye). -< : Veri iÅŸaretçisini bir önceki hücreye hareket ettirir(soldaki hücreye). -. : Geçerli hücrenin ASCII deÄŸerini yazdırır (örn: 65 = 'A'). -, : Bir girdilik karakteri aktif hücre için okur. -[ : EÄŸer geçerli hücredeki deÄŸer sıfır ise, ]ifadesine atlar. - DiÄŸer durumlarda bir sonraki yönergeye geçer. -] : EÄŸer geçerli hücredeki deÄŸer sıfır ise, bir sonraki yönergeye geçer. - DiÄŸer durumlarda, [ ifadesine karşılık gelen yönergelere döner. - -[ ve ] bir while döngüsü oluÅŸturur. Açıkça, dengeli olmalıdırlar. - -Basit bir brainfuck programına göz atalım. - -++++++ [ > ++++++++++ < - ] > +++++ . - -Bu program 'A' karaterini ekrana basar. İlk olarak, #1'inci hücre 6'ya artırılır. -#1'inci hücre döngü için kullanılacaktır. Sonra, ([) döngüsüne girilir ve -#2'inci hücreye hareket edilir. #2'inci hücre 10 kez artırılır, #1'inci hücreye -geri dönülür. #1 hücresini bir azaltır. Bu döngü 6 kez gerçekleÅŸir. (Bu 6 kez -azaltmak demektir, #1 hücresi 0 deÄŸerini alır ve bu noktada ] ifadesini atlar). - -Bu noktada, biz #1 hücresindeyiz, deÄŸeri ÅŸu anda 0 ve #2 hücresinin deÄŸeri -60'tır. Biz #2 hücresine hareket diyoruz ve bu hücreyi 5 defa artırıyoruz. -#2'nin ÅŸu anki deÄŸeri 65 olur. Sonra #2 hücresinin ASCII karşılığını -yazdırıyoruz. 65 deÄŸerinin ASCII karşılığı 'A'dır. Ekrana 'A' yazılacaktır. - - -, [ > + < - ] > . - -Bu program kullanıcıdan bir girdi okur, ve karakteri bir diÄŸer hücreye yazdırır, -ve daha sonra aynı karakteri ekrana yazdırır. - -, ifadesi kullanıcıdan karakteri #1 hücresine okur. Sonra bir döngü -baÅŸlar. #2 hücresine hareket edilir, #2 hücresinin deÄŸeri bir artırılır, #1 -hücresine geri dönülür, ve #1 hücresinin deÄŸer bir azaltılır. Bu #1 hücresinin -deÄŸeri 0 olana kadar devam eder ve #2 hücresi #1'in eski deÄŸerini tutar. Çünkü -biz #1 hücresindeki verileri döngü süresince #2 hücresine taşıyoruz, ve sonunda -#2 hücresinin ASCII deÄŸerini yazdırıyoruz. - -BoÅŸluk karakteri sadece okunabilirliÄŸi artırmak içindir. AÅŸağıdaki gibi de -yazabilirsiniz. - -,[>+<-]>. - - -Bu uygulamanın ne yaptığına bakalım: - -,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >> - -Bu program 2 sayı alır, ve birbiri ile çarpar. - -Özetle, ilk olarak iki girdi alır. Sonra, #1 hücresinde ÅŸarta baÄŸlı harici bir -döngü baÅŸlar. Sonra #2 ye hareket edilir, ve içerde #2 hücresine baÄŸlı bir döngü -daha baÅŸlar ve #3 hücresinin deÄŸerini artırır. Ama, Bir problem vardır: iç -döngünün sonunda #2'inci hücrenin deÄŸeri 0 olacaktır. Bunu çözmek için #4 -hücresinin de deÄŸerini yükseltiyoruz, ve sonra #4 hücresinin deÄŸerini #2'ye -kopyalıyoruz. -``` - -İşte brainfuck. Zor deÄŸil deÄŸil mi? EÄŸlenmek için kendi programınızı -yazabilirsiniz, veya farklı bir dilde brainfuck yorumlayıcısı yazabilirsiniz. -Yorumlayıcı oldukça basittir, ama mazoÅŸist iseniz, brainfuck içerisinde bir -brainfuck yorumlayıcısı yazmayı deneyebilirsiniz. -- cgit v1.2.3 From 484300f1db4509b08ed48526c61fcfcb48a6152b Mon Sep 17 00:00:00 2001 From: Zach Latta Date: Tue, 23 Feb 2016 16:12:44 -0800 Subject: Fix capitalization of GitHub --- tr-tr/markdown-tr.html.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'tr-tr') diff --git a/tr-tr/markdown-tr.html.markdown b/tr-tr/markdown-tr.html.markdown index bac8f6fc..b8f11e39 100644 --- a/tr-tr/markdown-tr.html.markdown +++ b/tr-tr/markdown-tr.html.markdown @@ -52,7 +52,7 @@ __Bu yazı da kalın.__ **_Bu da öyle!_** *__Hatta bu bile!__* - + ~~Bu yazı üstü çizili olarak gözükecek.~~ @@ -151,7 +151,7 @@ kullanabilirsiniz --> Ahmet `go_to()` fonksiyonun ne yaptığını bilmiyor! - + \`\`\`ruby def foobar @@ -159,7 +159,7 @@ def foobar end \`\`\` - @@ -230,7 +230,7 @@ Bu yazının *yıldızlar arasında gözükmesini* istiyorum fakat italik olmama bunun için, ÅŸu ÅŸekilde: \*bu yazı italik deÄŸil, yıldızlar arasında\*. - | Sütun1 | Sütun 2 | Sütün 3 | -- cgit v1.2.3 From ab4fa4ea02e29c8f680aa70a01da082c08cb11d8 Mon Sep 17 00:00:00 2001 From: Mustafa Zengin Date: Sun, 24 Apr 2016 22:57:21 -0700 Subject: fsharp translation to Turkish in progress --- tr-tr/fsharp-tr.html.markdown | 630 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 630 insertions(+) create mode 100644 tr-tr/fsharp-tr.html.markdown (limited to 'tr-tr') diff --git a/tr-tr/fsharp-tr.html.markdown b/tr-tr/fsharp-tr.html.markdown new file mode 100644 index 00000000..b844f552 --- /dev/null +++ b/tr-tr/fsharp-tr.html.markdown @@ -0,0 +1,630 @@ +--- +language: F# +contributors: + - ["Scott Wlaschin", "http://fsharpforfunandprofit.com/"] +translators: + - ["Mustafa Zengin", "http://zengin.github.com/"] +filename: learnfsharp.fs +--- + +F# fonksiyonel ve nesne tabanlı, genel amaçlı bir programlama dilidir. Bedava ve açık kaynaklıdır ve Linux, Mac, Windows ve dahasında çalışır. + +Hataları derleme zamanında yakalayan çok güçlü bir tip sistemine sahiptir, ancak tip çıkarımı yaptığından dinamik bir dil gibi görünür. + +F#'ın söz dizimi C-stili dillerden farklıdır: + +* Küme parantezi kod bloklarını ayırmak için kullanılmaz. Bunun yerine Python'da olduÄŸu gibi girinti kullanılır. +* Parametreleri birbirinden ayırmak için virgül yerine boÅŸluk karakteri kullanılır. + +AÅŸağıdaki kodu denemek istiyorsanız, [tryfsharp.org](http://www.tryfsharp.org/Create)'a gidin be interaktif REPL'e kodu yapıştırın. + +```csharp + +// tek satır yorumlar ikili bölme iÅŸareti kullanılır +(* çok satırlı yorumlar (* . . . *) ikilisini kullanır + +-çok satırlı yorumun sonu- *) + +// ================================================ +// Temel Söz Dizimi +// ================================================ + +// ------ "DeÄŸiÅŸkenler" (tam da deÄŸil) ------ +// "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 + +// ------ 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. +// Sonuç: [1; 2; 3; 4; 5] +let zeroToFive = [0; 1] @ twoToFive // @ 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 add x y = x + y // add (x,y) kullanmayın! Bu tamamen baÅŸka bir anlama geliyor. +add 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 + +evens oneToFive // Åž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] ) + +// 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ı + +// Lambda'ları (anonim fonksiyonları) "fun" anahtar kelimesiyle tanımlayabilirsin +let sumOfSquaresTo100withFun = + [1..100] |> List.map (fun x -> x * x) |> List.sum + +// 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 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 + +// 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 + +// 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 = + match input with + | Some i -> printfn "input is an int=%d" i + | None -> printfn "input is missing" + +optionPatternMatch validValue +optionPatternMatch invalidValue + +// ------ Printing ------ +// The printf/printfn functions are similar to the +// Console.Write/WriteLine functions in C#. +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] + +// There are also sprintf/sprintfn functions for formatting data +// into a string, similar to String.Format in C#. + +// ================================================ +// More on functions +// ================================================ + +// F# is a true functional language -- functions are first +// class entities and can be combined easily to make powerful +// constructs + +// Modules are used to group functions together +// Indentation is needed for each nested module. +module FunctionExamples = + + // define a simple adding function + let add x y = x + y + + // basic usage of a function + let a = add 1 2 + printfn "1 + 2 = %i" a + + // partial application to "bake in" parameters + let add42 = add 42 + let b = add42 1 + printfn "42 + 1 = %i" b + + // composition to combine functions + let add1 = add 1 + let add2 = add 2 + let add3 = add1 >> add2 + let c = add3 7 + printfn "3 + 7 = %i" c + + // higher order functions + [1..10] |> List.map add3 |> printfn "new list is %A" + + // lists of functions, and more + let add6 = [add1; add2; add3] |> List.reduce (>>) + let d = add6 7 + printfn "1 + 2 + 3 + 7 = %i" d + +// ================================================ +// Lists and collection +// ================================================ + +// There are three types of ordered collection: +// * Lists are most basic immutable collection. +// * Arrays are mutable and more efficient when needed. +// * Sequences are lazy and infinite (e.g. an enumerator). +// +// Other collections include immutable maps and sets +// plus all the standard .NET collections + +module ListExamples = + + // lists use square brackets + let list1 = ["a"; "b"] + let list2 = "c" :: list1 // :: is prepending + let list3 = list1 @ list2 // @ is concat + + // list comprehensions (aka generators) + let squares = [for i in 1..10 do yield i * i] + + // prime number generator + let rec sieve = function + | (p::xs) -> p :: sieve [ for x in xs do if x % p > 0 then yield x ] + | [] -> [] + let primes = sieve [2..50] + printfn "%A" primes + + // pattern matching for lists + 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" + + listMatcher [1; 2; 3; 4] + listMatcher [1; 2] + listMatcher [1] + listMatcher [] + + // recursion using lists + let rec sum aList = + match aList with + | [] -> 0 + | x::xs -> x + sum xs + sum [1..10] + + // ----------------------------------------- + // Standard library functions + // ----------------------------------------- + + // map + let add3 x = x + 3 + [1..10] |> List.map add3 + + // filter + let even x = x % 2 = 0 + [1..10] |> List.filter even + + // many more -- see documentation + +module ArrayExamples = + + // arrays use square brackets with bar + let array1 = [| "a"; "b" |] + let first = array1.[0] // indexed access using dot + + // pattern matching for arrays is same as for lists + 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" + + arrayMatcher [| 1; 2; 3; 4 |] + + // Standard library functions just as for List + + [| 1..10 |] + |> Array.map (fun i -> i + 3) + |> Array.filter (fun i -> i % 2 = 0) + |> Array.iter (printfn "value is %i. ") + + +module SequenceExamples = + + // sequences use curly braces + let seq1 = seq { yield "a"; yield "b" } + + // sequences can use yield and + // can contain subsequences + let strange = seq { + // "yield" adds one element + yield 1; yield 2; + + // "yield!" adds a whole subsequence + yield! [5..10] + yield! seq { + for i in 1..10 do + if i % 2 = 0 then yield i }} + // test + strange |> Seq.toList + + + // Sequences can be created using "unfold" + // Here's the fibonacci series + let fib = Seq.unfold (fun (fst,snd) -> + Some(fst + snd, (snd, fst + snd))) (0,1) + + // test + let fib10 = fib |> Seq.take 10 |> Seq.toList + printf "first 10 fibs are %A" fib10 + + +// ================================================ +// Data Types +// ================================================ + +module DataTypeExamples = + + // All data is immutable by default + + // Tuples are quick 'n easy anonymous types + // -- Use a comma to create a tuple + let twoTuple = 1, 2 + let threeTuple = "a", 2, true + + // Pattern match to unpack + let x, y = twoTuple // sets x = 1, y = 2 + + // ------------------------------------ + // Record types have named fields + // ------------------------------------ + + // Use "type" with curly braces to define a record type + type Person = {First:string; Last:string} + + // Use "let" with curly braces to create a record + let person1 = {First="John"; Last="Doe"} + + // Pattern match to unpack + let {First = first} = person1 // sets first="John" + + // ------------------------------------ + // Union types (aka variants) have a set of choices + // Only case can be valid at a time. + // ------------------------------------ + + // Use "type" with bar/pipe to define a union type + type Temp = + | DegreesC of float + | DegreesF of float + + // Use one of the cases to create one + let temp1 = DegreesF 98.6 + let temp2 = DegreesC 37.0 + + // Pattern match on all cases to unpack + let printTemp = function + | DegreesC t -> printfn "%f degC" t + | DegreesF t -> printfn "%f degF" t + + printTemp temp1 + printTemp temp2 + + // ------------------------------------ + // Recursive types + // ------------------------------------ + + // Types can be combined recursively in complex ways + // without having to create subclasses + type Employee = + | Worker of Person + | Manager of Employee list + + let jdoe = {First="John"; Last="Doe"} + let worker = Worker jdoe + + // ------------------------------------ + // Modeling with types + // ------------------------------------ + + // Union types are great for modeling state without using flags + type EmailAddress = + | ValidEmailAddress of string + | InvalidEmailAddress of string + + let trySendEmail email = + match email with // use pattern matching + | ValidEmailAddress address -> () // send + | InvalidEmailAddress address -> () // don't send + + // The combination of union types and record types together + // provide a great foundation for domain driven design. + // You can create hundreds of little types that accurately + // reflect the domain. + + type CartItem = { ProductCode: string; Qty: int } + type Payment = Payment of float + type ActiveCartData = { UnpaidItems: CartItem list } + type PaidCartData = { PaidItems: CartItem list; Payment: Payment} + + type ShoppingCart = + | EmptyCart // no data + | ActiveCart of ActiveCartData + | PaidCart of PaidCartData + + // ------------------------------------ + // Built in behavior for types + // ------------------------------------ + + // Core types have useful "out-of-the-box" behavior, no coding needed. + // * Immutability + // * Pretty printing when debugging + // * Equality and comparison + // * Serialization + + // Pretty printing using %A + printfn "twoTuple=%A,\nPerson=%A,\nTemp=%A,\nEmployee=%A" + twoTuple person1 temp1 worker + + // Equality and comparison built in. + // Here's an example with cards. + type Suit = Club | Diamond | Spade | Heart + type Rank = Two | Three | Four | Five | Six | Seven | Eight + | Nine | Ten | Jack | Queen | King | Ace + + let hand = [ Club, Ace; Heart, Three; Heart, Ace; + Spade, Jack; Diamond, Two; Diamond, Ace ] + + // sorting + 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" + + +// ================================================ +// Active patterns +// ================================================ + +module ActivePatternExamples = + + // F# has a special type of pattern matching called "active patterns" + // where the pattern can be parsed or detected dynamically. + + // "banana clips" are the syntax for active patterns + + // for example, define an "active" pattern to match character types... + 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 + + // ... and then use it to make parsing logic much clearer + 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 + + // print a list + ['a'; 'b'; '1'; ' '; '-'; 'c'] |> List.iter printChar + + // ----------------------------------- + // FizzBuzz using active patterns + // ----------------------------------- + + // You can create partial matching patterns as well + // Just use underscore in the definition, and return Some if matched. + let (|MultOf3|_|) i = if i % 3 = 0 then Some MultOf3 else None + let (|MultOf5|_|) i = if i % 5 = 0 then Some MultOf5 else None + + // the main function + let fizzBuzz i = + match i with + | MultOf3 & MultOf5 -> printf "FizzBuzz, " + | MultOf3 -> printf "Fizz, " + | MultOf5 -> printf "Buzz, " + | _ -> printf "%i, " i + + // test + [1..20] |> List.iter fizzBuzz + +// ================================================ +// Conciseness +// ================================================ + +module AlgorithmExamples = + + // F# has a high signal/noise ratio, so code reads + // almost like the actual algorithm + + // ------ Example: define sumOfSquares function ------ + let sumOfSquares n = + [1..n] // 1) take all the numbers from 1 to n + |> List.map square // 2) square each one + |> List.sum // 3) sum the results + + // test + sumOfSquares 100 |> printfn "Sum of squares = %A" + + // ------ Example: define a sort function ------ + let rec sort list = + match list with + // If the list is empty + | [] -> + [] // return an empty list + // If the list is not empty + | firstElem::otherElements -> // take the first element + let smallerElements = // extract the smaller elements + otherElements // from the remaining ones + |> List.filter (fun e -> e < firstElem) + |> sort // and sort them + let largerElements = // extract the larger ones + otherElements // from the remaining ones + |> List.filter (fun e -> e >= firstElem) + |> sort // and sort them + // Combine the 3 parts into a new list and return it + List.concat [smallerElements; [firstElem]; largerElements] + + // test + sort [1; 5; 23; 18; 9; 1; 3] |> printfn "Sorted = %A" + +// ================================================ +// Asynchronous Code +// ================================================ + +module AsyncExample = + + // F# has built-in features to help with async code + // without encountering the "pyramid of doom" + // + // The following example downloads a set of web pages in parallel. + + open System.Net + open System + open System.IO + open Microsoft.FSharp.Control.CommonExtensions + + // Fetch the contents of a URL asynchronously + let fetchUrlAsync url = + async { // "async" keyword and curly braces + // creates an "async" object + let req = WebRequest.Create(Uri(url)) + use! resp = req.AsyncGetResponse() + // use! is async assignment + use stream = resp.GetResponseStream() + // "use" triggers automatic close() + // on resource at end of scope + use reader = new IO.StreamReader(stream) + let html = reader.ReadToEnd() + printfn "finished downloading %s" url + } + + // a list of sites to fetch + let sites = ["http://www.bing.com"; + "http://www.google.com"; + "http://www.microsoft.com"; + "http://www.amazon.com"; + "http://www.yahoo.com"] + + // do it + sites + |> List.map fetchUrlAsync // make a list of async tasks + |> Async.Parallel // set up the tasks to run in parallel + |> Async.RunSynchronously // start them off + +// ================================================ +// .NET compatibility +// ================================================ + +module NetCompatibilityExamples = + + // F# can do almost everything C# can do, and it integrates + // seamlessly with .NET or Mono libraries. + + // ------- work with existing library functions ------- + + let (i1success, i1) = System.Int32.TryParse("123"); + if i1success then printfn "parsed as %i" i1 else printfn "parse failed" + + // ------- Implement interfaces on the fly! ------- + + // create a new object that implements IDisposable + let makeResource name = + { new System.IDisposable + with member this.Dispose() = printfn "%s disposed" name } + + let useAndDisposeResources = + use r1 = makeResource "first resource" + printfn "using first 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" + printfn "done." + + // ------- Object oriented code ------- + + // F# is also a fully fledged OO language. + // It supports classes, inheritance, virtual methods, etc. + + // interface with generic type + type IEnumerator<'a> = + abstract member Current : 'a + abstract MoveNext : unit -> bool + + // abstract base class with virtual methods + [] + type Shape() = + // readonly properties + abstract member Width : int with get + abstract member Height : int with get + // non-virtual method + member this.BoundingArea = this.Height * this.Width + // virtual method with base implementation + abstract member Print : unit -> unit + default this.Print () = printfn "I'm a shape" + + // concrete class that inherits from base class and overrides + type Rectangle(x:int, y:int) = + inherit Shape() + override this.Width = x + override this.Height = y + override this.Print () = printfn "I'm a Rectangle" + + // test + let r = Rectangle(2, 3) + printfn "The width is %i" r.Width + printfn "The area is %i" r.BoundingArea + r.Print() + + // ------- extension methods ------- + + // Just as in C#, F# can extend existing classes with extension methods. + type System.String with + member this.StartsWithA = this.StartsWith "A" + + // test + let s = "Alice" + printfn "'%s' starts with an 'A' = %A" s s.StartsWithA + + // ------- events ------- + + type MyButton() = + let clickEvent = new Event<_>() + + [] + member this.OnClick = clickEvent.Publish + + member this.TestEvent(arg) = + clickEvent.Trigger(this, arg) + + // test + let myButton = new MyButton() + myButton.OnClick.Add(fun (sender, arg) -> + printfn "Click event with arg=%O" arg) + + myButton.TestEvent("Hello World!") + +``` + +## More Information + +For more demonstrations of F#, go to the [Try F#](http://www.tryfsharp.org/Learn) site, or my [why use F#](http://fsharpforfunandprofit.com/why-use-fsharp/) series. + +Read more about F# at [fsharp.org](http://fsharp.org/). -- cgit v1.2.3 From 9b400a620a189c21c41ea3aa36c81726c134af81 Mon Sep 17 00:00:00 2001 From: kahredici Date: Tue, 26 Apr 2016 00:59:57 +0300 Subject: small additions. --- tr-tr/python3-tr.html.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'tr-tr') diff --git a/tr-tr/python3-tr.html.markdown b/tr-tr/python3-tr.html.markdown index c7de2922..e53d5568 100644 --- a/tr-tr/python3-tr.html.markdown +++ b/tr-tr/python3-tr.html.markdown @@ -618,14 +618,19 @@ print(soyle(lutfen_soyle=True)) # Ban soda alır mısın? Lutfen! Artık dayana ### Ücretsiz Online +* [Automate the Boring Stuff with Python](https://automatetheboringstuff.com) * [Learn Python The Hard Way](http://learnpythonthehardway.org/book/) * [Dive Into Python](http://www.diveintopython.net/) * [Ideas for Python Projects](http://pythonpracticeprojects.com) - * [The Official Docs](http://docs.python.org/3/) * [Hitchhiker's Guide to Python](http://docs.python-guide.org/en/latest/) * [A Crash Course in Python for Scientists](http://nbviewer.ipython.org/5920182) * [Python Course](http://www.python-course.eu/index.php) +* [First Steps With Python](https://realpython.com/learn/python-first-steps/) +* [A curated list of awesome Python frameworks, libraries and software](https://github.com/vinta/awesome-python) +* [30 Python Language Features and Tricks You May Not Know About](http://sahandsaba.com/thirty-python-language-features-and-tricks-you-may-not-know.html) +* [Official Style Guide for Python](https://www.python.org/dev/peps/pep-0008/) +* [Python 3 Computer Science Circles](http://cscircles.cemc.uwaterloo.ca/) ### Kitaplar -- cgit v1.2.3 From 67a867ac0a96e6b5bdce8ab9cb700f3039741447 Mon Sep 17 00:00:00 2001 From: Mustafa Zengin Date: Mon, 25 Apr 2016 16:02:07 -0700 Subject: fsharp tutorial Turkish translation first pass complete --- tr-tr/fsharp-tr.html.markdown | 300 +++++++++++++++++++++--------------------- 1 file changed, 150 insertions(+), 150 deletions(-) (limited to 'tr-tr') diff --git a/tr-tr/fsharp-tr.html.markdown b/tr-tr/fsharp-tr.html.markdown index b844f552..828d7327 100644 --- a/tr-tr/fsharp-tr.html.markdown +++ b/tr-tr/fsharp-tr.html.markdown @@ -7,7 +7,7 @@ translators: filename: learnfsharp.fs --- -F# fonksiyonel ve nesne tabanlı, genel amaçlı bir programlama dilidir. Bedava ve açık kaynaklıdır ve Linux, Mac, Windows ve dahasında çalışır. +F# fonksiyonel ve nesne yönelimli, genel amaçlı bir programlama dilidir. Bedava ve açık kaynaklıdır ve Linux, Mac, Windows ve dahasında çalışır. Hataları derleme zamanında yakalayan çok güçlü bir tip sistemine sahiptir, ancak tip çıkarımı yaptığından dinamik bir dil gibi görünür. @@ -106,84 +106,84 @@ let optionPatternMatch input = optionPatternMatch validValue optionPatternMatch invalidValue -// ------ Printing ------ -// The printf/printfn functions are similar to the -// Console.Write/WriteLine functions in C#. +// ------ 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] -// There are also sprintf/sprintfn functions for formatting data -// into a string, similar to String.Format in C#. +// sprintf/sprintfn fonksiyonları ise veriyi string'e +// çevirmek içindir, C#'taki String.Format gibi. // ================================================ -// More on functions +// Fonksiyonlar hakkında dahası // ================================================ -// F# is a true functional language -- functions are first -// class entities and can be combined easily to make powerful -// constructs +// F# gerçek bir fonksiyonel dildir. Fonksiyonlar birinci +// sınıf varlıklardır ve güçlü yapılar oluÅŸturmak için +// birleÅŸtirilebilirler. -// Modules are used to group functions together -// Indentation is needed for each nested module. +// Modüller fonksiyonları gruplamak için kullanılır. +// Her bir modül için girinti gerekir. module FunctionExamples = - // define a simple adding function + // Temel bir ekleme fonksiyonu tanımla let add x y = x + y - // basic usage of a function + // Bir fonksiyonun temel kullanımı let a = add 1 2 printfn "1 + 2 = %i" a - // partial application to "bake in" parameters + // Parametreleri kaynaklamak için parçalı uygulama let add42 = add 42 let b = add42 1 printfn "42 + 1 = %i" b - // composition to combine functions + // Fonksiyonları birleÅŸtirmek için kompozisyon let add1 = add 1 let add2 = add 2 let add3 = add1 >> add2 let c = add3 7 printfn "3 + 7 = %i" c - // higher order functions + // Yüksek dereceli fonksiyonlar [1..10] |> List.map add3 |> printfn "new list is %A" - // lists of functions, and more + // Fonksiyonlar listesi ve dahası let add6 = [add1; add2; add3] |> List.reduce (>>) let d = add6 7 printfn "1 + 2 + 3 + 7 = %i" d // ================================================ -// Lists and collection +// Listeler ve kolleksiyonlar // ================================================ -// There are three types of ordered collection: -// * Lists are most basic immutable collection. -// * Arrays are mutable and more efficient when needed. -// * Sequences are lazy and infinite (e.g. an enumerator). -// -// Other collections include immutable maps and sets -// plus all the standard .NET collections +// Üç çesit sıralı fonksiyon vardır: +// * Listeler en temel deÄŸiÅŸtirilemez kolleksiyonlardır. +// * Diziler deÄŸiÅŸtirilebilir ve gerektiÄŸinde daha verimlidirler. +// * Seriler tembel (lazy evaluation) ve sonsuzdurlar (Enumeratörler gibi). +// +// DeÄŸiÅŸtirilmez map'ler ve kümeler ve bütün .NET kolleksiyonları +// diÄŸer kolleksiyon türleridir. module ListExamples = - // lists use square brackets + // listeler köşeli parantez kullanır let list1 = ["a"; "b"] - let list2 = "c" :: list1 // :: is prepending - let list3 = list1 @ list2 // @ is concat + let list2 = "c" :: list1 // :: baÅŸa eleman ekler + let list3 = list1 @ list2 // @ listeleri birbirine ekler - // list comprehensions (aka generators) + // Liste comprehension'ları (jeneratörler olarak da bilinir) let squares = [for i in 1..10 do yield i * i] - // prime number generator + // 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 primes = sieve [2..50] printfn "%A" primes - // pattern matching for lists + // Listelerle kalıp eÅŸleÅŸtirme let listMatcher aList = match aList with | [] -> printfn "the list is empty" @@ -196,7 +196,7 @@ module ListExamples = listMatcher [1] listMatcher [] - // recursion using lists + // Listeleri kullanarak recursion let rec sum aList = match aList with | [] -> 0 @@ -204,7 +204,7 @@ module ListExamples = sum [1..10] // ----------------------------------------- - // Standard library functions + // Standart kütüphane fonksiyonları // ----------------------------------------- // map @@ -215,15 +215,15 @@ module ListExamples = let even x = x % 2 = 0 [1..10] |> List.filter even - // many more -- see documentation + // ve dahası -- dökümantasyonu bakınız module ArrayExamples = - // arrays use square brackets with bar + // Diziler köşeli parantezle birlikte çubuk karakterini kullanır let array1 = [| "a"; "b" |] - let first = array1.[0] // indexed access using dot + let first = array1.[0] // nokta kullanarak indeks eriÅŸimi - // pattern matching for arrays is same as for lists + // Diziler için kalıp eÅŸleÅŸtirme listlerle aynıdır let arrayMatcher aList = match aList with | [| |] -> printfn "the array is empty" @@ -233,7 +233,7 @@ module ArrayExamples = arrayMatcher [| 1; 2; 3; 4 |] - // Standard library functions just as for List + // Listede olduÄŸu gibi kütüphane fonksiyonları [| 1..10 |] |> Array.map (fun i -> i + 3) @@ -243,16 +243,16 @@ module ArrayExamples = module SequenceExamples = - // sequences use curly braces + // seriler kıvrık parantez kullanır let seq1 = seq { yield "a"; yield "b" } - // sequences can use yield and - // can contain subsequences + // seriler yield'ı kullanabilir + // ve alt seriler barındırabilir let strange = seq { - // "yield" adds one element + // "yield" bir eleman ekliyor yield 1; yield 2; - // "yield!" adds a whole subsequence + // "yield!" bütün bir alt seriyi ekliyor yield! [5..10] yield! seq { for i in 1..10 do @@ -261,8 +261,8 @@ module SequenceExamples = strange |> Seq.toList - // Sequences can be created using "unfold" - // Here's the fibonacci series + // 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) @@ -272,49 +272,49 @@ module SequenceExamples = // ================================================ -// Data Types +// Veri Tipleri // ================================================ module DataTypeExamples = - // All data is immutable by default + // Bütün veriler varsayılan olarak deÄŸiÅŸtirilemezdir. - // Tuples are quick 'n easy anonymous types - // -- Use a comma to create a tuple + // Tuple'lar çabuk ve kolay anonim tiplerdir. + // -- Tuple oluÅŸturmak için virgül kullan let twoTuple = 1, 2 let threeTuple = "a", 2, true - // Pattern match to unpack - let x, y = twoTuple // sets x = 1, y = 2 + // paketi açmak için kalıp eÅŸleÅŸtirme kullan + let x, y = twoTuple // x = 1, y = 2 // ------------------------------------ - // Record types have named fields + // Record tipi isimlendirilmiÅŸ alanlara sahiptir // ------------------------------------ - // Use "type" with curly braces to define a record type + // "type" ile kıvrık parantezleri record tipi oluÅŸturmak için kullan type Person = {First:string; Last:string} - // Use "let" with curly braces to create a record + // "let" ile kıvrık parantezi record tipi oluÅŸturmak için kullan let person1 = {First="John"; Last="Doe"} - // Pattern match to unpack - let {First = first} = person1 // sets first="John" + // paketi açmak için kalıp eÅŸleÅŸtirme kullan + let {First = first} = person1 // first="John" // ------------------------------------ - // Union types (aka variants) have a set of choices - // Only case can be valid at a time. + // Union tipleri (deÄŸiÅŸkenler olarak da bilinir) birden fazla + // seçeneÄŸe sahiptir. Belli bir zamanda sadece bir tanesi geçerlidir. // ------------------------------------ - // Use "type" with bar/pipe to define a union type + // "type" ile çubuk karakterini union tipi tanımlamak için kullan type Temp = | DegreesC of float | DegreesF of float - // Use one of the cases to create one + // Seçeneklerden birini kullan let temp1 = DegreesF 98.6 let temp2 = DegreesC 37.0 - // Pattern match on all cases to unpack + // 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 @@ -323,11 +323,11 @@ module DataTypeExamples = printTemp temp2 // ------------------------------------ - // Recursive types + // Yinelgen (Recursive) tipler // ------------------------------------ - // Types can be combined recursively in complex ways - // without having to create subclasses + // Tipler alt sınıflar oluÅŸturmadan karmaşık ÅŸekillerde + // yinelgen olarak birleÅŸtirilebilirler. type Employee = | Worker of Person | Manager of Employee list @@ -336,23 +336,22 @@ module DataTypeExamples = let worker = Worker jdoe // ------------------------------------ - // Modeling with types + // Tipleri Kullanarak Modelleme // ------------------------------------ - // Union types are great for modeling state without using flags + // Union tipleri bayrak kullanmadan durum modelleme için harikadır. type EmailAddress = | ValidEmailAddress of string | InvalidEmailAddress of string let trySendEmail email = - match email with // use pattern matching - | ValidEmailAddress address -> () // send - | InvalidEmailAddress address -> () // don't send + match email with // kalıp eÅŸleÅŸtirme kullan + | ValidEmailAddress address -> () // gönder + | InvalidEmailAddress address -> () // gönderme - // The combination of union types and record types together - // provide a great foundation for domain driven design. - // You can create hundreds of little types that accurately - // reflect the domain. + // 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 @@ -360,26 +359,27 @@ module DataTypeExamples = type PaidCartData = { PaidItems: CartItem list; Payment: Payment} type ShoppingCart = - | EmptyCart // no data + | EmptyCart // veri yok | ActiveCart of ActiveCartData | PaidCart of PaidCartData // ------------------------------------ - // Built in behavior for types + // Tipler için içgüdüsel davranış // ------------------------------------ - // Core types have useful "out-of-the-box" behavior, no coding needed. - // * Immutability - // * Pretty printing when debugging - // * Equality and comparison + // Çekirdek tipler kendinden çok kullanışlı özelliklere sahiptir + // Ek kodlama gerektirmez + // * DeÄŸiÅŸmezlik + // * Debug ederken yazdırma + // * EÅŸitlik ve kıyaslama // * Serialization - // Pretty printing using %A + // %A kullanarak yazdırma printfn "twoTuple=%A,\nPerson=%A,\nTemp=%A,\nEmployee=%A" twoTuple person1 temp1 worker - // Equality and comparison built in. - // Here's an example with cards. + // 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 @@ -387,31 +387,31 @@ module DataTypeExamples = let hand = [ Club, Ace; Heart, Three; Heart, Ace; Spade, Jack; Diamond, Two; Diamond, Ace ] - // sorting + // 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" // ================================================ -// Active patterns +// Aktif Kalıplar // ================================================ module ActivePatternExamples = - // F# has a special type of pattern matching called "active patterns" - // where the pattern can be parsed or detected dynamically. + // F# "aktif kalıplar" denen bir kalıp eÅŸleÅŸtirmeye sahiptir. + // Kalıplar dinamik bir ÅŸekilde tespit edilip eÅŸleÅŸtirilebilir. - // "banana clips" are the syntax for active patterns + // Aktif kalıplar için söz dizimi (| ... |) ÅŸeklindedir - // for example, define an "active" pattern to match character types... + // Ö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 - // ... and then use it to make parsing logic much clearer + // ... 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 @@ -419,19 +419,19 @@ module ActivePatternExamples = | Whitespace -> printfn "%c is a Whitespace" ch | _ -> printfn "%c is something else" ch - // print a list + // Bir liste yazdırma ['a'; 'b'; '1'; ' '; '-'; 'c'] |> List.iter printChar // ----------------------------------- - // FizzBuzz using active patterns + // Aktif Kalıpları Kullanarak FizzBuzz // ----------------------------------- - // You can create partial matching patterns as well - // Just use underscore in the definition, and return Some if matched. + // 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 - // the main function + // Ana fonksiyon let fizzBuzz i = match i with | MultOf3 & MultOf5 -> printf "FizzBuzz, " @@ -443,106 +443,106 @@ module ActivePatternExamples = [1..20] |> List.iter fizzBuzz // ================================================ -// Conciseness +// Sadelik // ================================================ module AlgorithmExamples = - // F# has a high signal/noise ratio, so code reads - // almost like the actual algorithm + // F#'ın sinyal/gürültü oranı yüksektir, dolayısıyla + // kod algoritmayla hemen hemen aynı görünür. - // ------ Example: define sumOfSquares function ------ + // ------ Örnek: sumOfSquares fonksiyonunu tanımla ------ let sumOfSquares n = - [1..n] // 1) take all the numbers from 1 to n - |> List.map square // 2) square each one - |> List.sum // 3) sum the results + [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 // test sumOfSquares 100 |> printfn "Sum of squares = %A" - // ------ Example: define a sort function ------ + // ------ Örnek: bir sıralama fonksiyonu tanımla ------ let rec sort list = match list with - // If the list is empty + // Liste boÅŸsa | [] -> - [] // return an empty list - // If the list is not empty - | firstElem::otherElements -> // take the first element - let smallerElements = // extract the smaller elements - otherElements // from the remaining ones + [] // 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 // and sort them - let largerElements = // extract the larger ones - otherElements // from the remaining ones + |> sort // ve sırala + let largerElements = // Daha büyük elemanları + otherElements // diÄŸerlerinden ayır |> List.filter (fun e -> e >= firstElem) - |> sort // and sort them - // Combine the 3 parts into a new list and return it + |> sort // ve sırala + // 3 parçayı birbirine ekle ve listeyi döndür List.concat [smallerElements; [firstElem]; largerElements] // test sort [1; 5; 23; 18; 9; 1; 3] |> printfn "Sorted = %A" // ================================================ -// Asynchronous Code +// EÅŸzamanlı olmayan kod // ================================================ module AsyncExample = - // F# has built-in features to help with async code - // without encountering the "pyramid of doom" + // F# "pyramid of doom" durumuyla karşılaÅŸtırmayacak ÅŸekilde + // içgüdüsel eÅŸzamanlı olmayan özelliklere sahiptir. // - // The following example downloads a set of web pages in parallel. + // Bir sonraki örnek bir web sayfasını paralel bir ÅŸekilde indirir. open System.Net open System open System.IO open Microsoft.FSharp.Control.CommonExtensions - // Fetch the contents of a URL asynchronously + // İçeriÄŸi eÅŸzamanlı olmayan bir ÅŸekilde getir let fetchUrlAsync url = - async { // "async" keyword and curly braces - // creates an "async" object + 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! is async assignment + // use! eÅŸzamanlı olmayan atamadır use stream = resp.GetResponseStream() - // "use" triggers automatic close() - // on resource at end of scope + // "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 } - // a list of sites to fetch + // İndirmek için bir web sitesi listesi let sites = ["http://www.bing.com"; "http://www.google.com"; "http://www.microsoft.com"; "http://www.amazon.com"; "http://www.yahoo.com"] - // do it + // İndir sites - |> List.map fetchUrlAsync // make a list of async tasks - |> Async.Parallel // set up the tasks to run in parallel - |> Async.RunSynchronously // start them off + |> 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 // ================================================ -// .NET compatibility +// .NET uyumluluÄŸu // ================================================ module NetCompatibilityExamples = - // F# can do almost everything C# can do, and it integrates - // seamlessly with .NET or Mono libraries. + // F#, C#'ın yapabildiÄŸi hemen herÅŸeyi yapabilir, + // ve .NET ve Mono kütüphaneleriyle tereyağından kıl çeker gibi çalışır. - // ------- work with existing library functions ------- + // ------- var olan kütüphane fonksiyonları ile çalışma ------- let (i1success, i1) = System.Int32.TryParse("123"); if i1success then printfn "parsed as %i" i1 else printfn "parse failed" - // ------- Implement interfaces on the fly! ------- + // ------- Arayüzleri yol üstünde tanımla! ------- - // create a new object that implements IDisposable + // IDisposable'ı saÄŸlayan yeni bir nesne oluÅŸtur let makeResource name = { new System.IDisposable with member this.Dispose() = printfn "%s disposed" name } @@ -558,29 +558,29 @@ module NetCompatibilityExamples = printfn "using second resource" printfn "done." - // ------- Object oriented code ------- + // ------- Nesne yönelimli kod ------- - // F# is also a fully fledged OO language. - // It supports classes, inheritance, virtual methods, etc. + // F# aynı zamanda tam bir nesne yönelimli dildir. + // Sınıfları, kalıtımı ve sanal metotları destekler. - // interface with generic type + // Genel ipli bir arayüz type IEnumerator<'a> = abstract member Current : 'a abstract MoveNext : unit -> bool - // abstract base class with virtual methods + // Sanal metotları olan soyut temel sınıflar [] type Shape() = - // readonly properties + // sadece okunabilir özellikler abstract member Width : int with get abstract member Height : int with get - // non-virtual method + // sanal olmayan metot member this.BoundingArea = this.Height * this.Width - // virtual method with base implementation + // temel uygulamasıyla bir sanal metot abstract member Print : unit -> unit default this.Print () = printfn "I'm a shape" - // concrete class that inherits from base class and overrides + // Somut bir sınıfın soyut sınıftan kalıtımı type Rectangle(x:int, y:int) = inherit Shape() override this.Width = x @@ -593,9 +593,9 @@ module NetCompatibilityExamples = printfn "The area is %i" r.BoundingArea r.Print() - // ------- extension methods ------- + // ------- ekleme metotları ------- - // Just as in C#, F# can extend existing classes with extension methods. + // C#'ta olduÄŸu gibi F# da var olan sınıfları ekleme metotları ile geniÅŸletebilir. type System.String with member this.StartsWithA = this.StartsWith "A" @@ -603,7 +603,7 @@ module NetCompatibilityExamples = let s = "Alice" printfn "'%s' starts with an 'A' = %A" s s.StartsWithA - // ------- events ------- + // ------- olaylar ------- type MyButton() = let clickEvent = new Event<_>() @@ -623,8 +623,8 @@ module NetCompatibilityExamples = ``` -## More Information +## Daha fazla bilgi -For more demonstrations of F#, go to the [Try F#](http://www.tryfsharp.org/Learn) site, or my [why use F#](http://fsharpforfunandprofit.com/why-use-fsharp/) series. +F# hakkında daha fazla demo için [Try F#](http://www.tryfsharp.org/Learn) sitesine gidin, veya benim (yazarın) [why use F#](http://fsharpforfunandprofit.com/why-use-fsharp/) serimi okuyun. -Read more about F# at [fsharp.org](http://fsharp.org/). +F# hakkında daha fazla bilgi için: [fsharp.org](http://fsharp.org/). -- cgit v1.2.3 From 71cf39f9c20f09bfd9b7dd60f3ec577420b0709d Mon Sep 17 00:00:00 2001 From: Mustafa Zengin Date: Mon, 25 Apr 2016 19:22:56 -0700 Subject: translation within the code --- tr-tr/fsharp-tr.html.markdown | 400 +++++++++++++++++++++--------------------- 1 file changed, 200 insertions(+), 200 deletions(-) (limited to 'tr-tr') 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!") -- cgit v1.2.3 From 8bd2fd283a5441f8be1382c536fb443baf1ab911 Mon Sep 17 00:00:00 2001 From: Mustafa Zengin Date: Mon, 25 Apr 2016 22:34:41 -0700 Subject: fsharp turkish translation, translation for code piece is also complete --- tr-tr/fsharp-tr.html.markdown | 368 +++++++++++++++++++++--------------------- 1 file changed, 184 insertions(+), 184 deletions(-) (limited to 'tr-tr') diff --git a/tr-tr/fsharp-tr.html.markdown b/tr-tr/fsharp-tr.html.markdown index c89b2e34..d88e2594 100644 --- a/tr-tr/fsharp-tr.html.markdown +++ b/tr-tr/fsharp-tr.html.markdown @@ -4,7 +4,7 @@ contributors: - ["Scott Wlaschin", "http://fsharpforfunandprofit.com/"] translators: - ["Mustafa Zengin", "http://zengin.github.com/"] -filename: learnfsharp.fs +filename: learnfsharp-tr.fs --- F# fonksiyonel ve nesne yönelimli, genel amaçlı bir programlama dilidir. Bedava ve açık kaynaklıdır ve Linux, Mac, Windows ve dahasında çalışır. @@ -20,8 +20,8 @@ AÅŸağıdaki kodu denemek istiyorsanız, [tryfsharp.org](http://www.tryfsharp.or ```csharp -// tek satır yorumlar ikili bölme iÅŸareti kullanılır -(* çok satırlı yorumlar (* . . . *) ikilisini kullanır +// tek satır yorumlar ikili bölme iÅŸareti ile baÅŸlar +(* çok satırlı yorumlar ( * . . . * ) ikilisini kullanır -çok satırlı yorumun sonu- *) @@ -31,59 +31,59 @@ AÅŸağıdaki kodu denemek istiyorsanız, [tryfsharp.org](http://www.tryfsharp.or // ------ "DeÄŸiÅŸkenler" (tam da deÄŸil) ------ // "let" anahtar kelimesi (deÄŸiÅŸmez) deÄŸer tanımlar -let myInt = 5 -let myFloat = 3.14 -let myString = "merhaba" // tip bilgisi olmamasına dikkat +let tamsayım = 5 +let ondalığım = 3.14 +let stringim = "merhaba" // tip bilgisi olmamasına dikkat // ------ Listeler ------ -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. +let ikidenBeÅŸe = [2; 3; 4; 5] // Köşeli parantezler listeleri oluÅŸturur, + // deÄŸerler ise noktalı virgülle ayrılır. +let birdenBeÅŸe = 1 :: ikidenBeÅŸe // :: yeni birinci elemanı olan bir liste oluÅŸturur. // Sonuç: [1; 2; 3; 4; 5] -let sifirdanBese = [0; 1] @ ikidenBese // @ iki listeyi birbirine ekler. +let sıfırdanBeÅŸe = [0; 1] @ ikidenBeÅŸe // @ 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 kare x = x * x // Parantez kullanılmadığına dikkat. -kare 3 // Åžimdi fonksiyonu uygula. Yine parantez yok. +kare 3 // Åžimdi fonksiyonu uygulayın. Yine parantez yok. 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 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 +topla 2 3 // Åžimdi fonksiyonu uygulayın. + +// çok satırlı bir fonksiyon tanımlamak için sadece girinti kullanın. Noktalı virgül gerekmez. +let çiftler liste = + let çiftMi x = x % 2 = 0 // "çiftMi"yi alt fonksiyon olarak tanımlayın + List.filter çiftMi liste // List.filter 'boolean bir fonksiyon' ve + // 'üzerinde çalışılacak bir liste' parametrelerinden oluÅŸan + // bir kütüphane fonksiyonu -evens birdenBese // Åžimdi fonksiyonu uygula. +çiftler birdenBeÅŸe // Åžimdi fonksiyonu uygula. -// Parantezleri önceliÄŸi netleÅŸtirmek için kullanabilirsin. Bu örnekte -// "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] ) +// Parantezleri önceliÄŸi netleÅŸtirmek için kullanabilirsiniz. Bu örnek +// "map"i önce iki argümana, sonra sonuç üzerinde "ekle" uyguluyor. +// Parantezler olmasaydı, "List.map" List.sum'ın ilk argümanı olurdu. +let yüzeKadarKarelerinToplamı = + List.sum ( 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 karelerToplami fonksiyonunun veri beslemeyle yazılmış hali var: -let veriBeslemeyleYuzeKadarKarelerinToplami = - [1..100] |> List.map kare |> List.ekle // "kare" önceden tanımlanmıştı +// Burada yüzeKadarKarelerinToplamı fonksiyonunun veri beslemeyle yazılmış hali var: +let veriBeslemeyleYüzeKadarKarelerinToplamı = + [1..100] |> List.map kare |> List.sum // "kare" önceden tanımlanmıştı // Lambda'ları (anonim fonksiyonları) "fun" anahtar kelimesiyle tanımlayabilirsin -let funlaYuzeKadarKarelerinToplami = - [1..100] |> List.map (fun x -> x * x) |> List.ekle +let funlaYüzeKadarKarelerinToplamı = + [1..100] |> List.map (fun x -> x * x) |> List.sum // 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 basitKalipEslestirme = +let basitKalıpEÅŸleÅŸtirme = let x = "a" match x with | "a" -> printfn "x a'dır" @@ -93,24 +93,24 @@ let basitKalipEslestirme = // 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 gecerliDeger = Some(99) -let gecersizDeger = None +let geçerliDeÄŸer = Some(99) +let geçersizDeÄŸer = 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 optionKalipEslestirme input = +let optionKalıpEÅŸleÅŸtirme input = match input with | Some i -> printfn "input is an int=%d" i | None -> printfn "input is missing" -optionKalipEslestirme gecerliDeger -optionKalipEslestirme gecersizDeger +optionKalıpEÅŸleÅŸtirme geçerliDeÄŸer +optionKalıpEÅŸleÅŸtirme geçersizDeÄŸer // ------ Yazdırma ------ // printf/printfn fonksiyonları C#'taki // Console.Write/WriteLine fonksiyonlarına benzer. -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] +printfn "Bir tamsayı %i, bir ondalık %f, bir boolean %b yazdırma" 1 2.0 true +printfn "Bir string %s, ve jenerik bir tip %A" "merhaba" [1; 2; 3; 4] // sprintf/sprintfn fonksiyonları ise veriyi string'e // çevirmek içindir, C#'taki String.Format gibi. @@ -135,23 +135,23 @@ module FonksiyonOrnekleri = printfn "1 + 2 = %i" a // Parametreleri kaynaklamak için parçalı uygulama - let kirkIkiEkle = topla 42 - let b = kirkIkiEkle 1 + let kırkİkiEkle = topla 42 + let b = kırkİkiEkle 1 printfn "42 + 1 = %i" b // Fonksiyonları birleÅŸtirmek için kompozisyon let birEkle = topla 1 let ikiEkle = topla 2 - let ucEkle = birEkle >> ikiEkle - let c = ucEkle 7 + let üçEkle = birEkle >> ikiEkle + let c = üçEkle 7 printfn "3 + 7 = %i" c // Yüksek dereceli fonksiyonlar - [1..10] |> List.map ucEkle |> printfn "yeni liste: %A" + [1..10] |> List.map üçEkle |> printfn "yeni liste: %A" // Fonksiyonlar listesi ve dahası - let altiEkle = [birEkle; ikiEkle; ucEkle] |> List.reduce (>>) - let d = altiEkle 7 + let altıEkle = [birEkle; ikiEkle; üçEkle] |> List.reduce (>>) + let d = altıEkle 7 printfn "1 + 2 + 3 + 7 = %i" d // ================================================ @@ -166,7 +166,7 @@ module FonksiyonOrnekleri = // DeÄŸiÅŸtirilmez map'ler ve kümeler ve bütün .NET kolleksiyonları // diÄŸer kolleksiyon türleridir. -module ListExamples = +module ListeÖrnekleri = // listeler köşeli parantez kullanır let liste1 = ["a"; "b"] @@ -184,17 +184,17 @@ module ListExamples = printfn "%A" asallar // Listelerle kalıp eÅŸleÅŸtirme - let listMatcher liste = + let listeEÅŸleyici 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] - listMatcher [1] - listMatcher [] + listeEÅŸleyici [1; 2; 3; 4] + listeEÅŸleyici [1; 2] + listeEÅŸleyici [1] + listeEÅŸleyici [] // Listeleri kullanarak recursion let rec ekle liste = @@ -208,30 +208,30 @@ module ListExamples = // ----------------------------------------- // map - let ucEkle x = x + 3 - [1..10] |> List.map ucEkle + let üçEkle x = x + 3 + [1..10] |> List.map üçEkle // filter - let cift x = x % 2 = 0 - [1..10] |> List.filter cift + let çift x = x % 2 = 0 + [1..10] |> List.filter çift // ve dahası -- dökümantasyona bakınız -module DiziOrnekleri = +module DiziÖrnekleri = // Diziler köşeli parantezle birlikte çubuk karakterini kullanır 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 diziEslestirici liste = + let diziEÅŸleÅŸtirici 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" - diziEslestirici [| 1; 2; 3; 4 |] + diziEÅŸleÅŸtirici [| 1; 2; 3; 4 |] // Listede olduÄŸu gibi kütüphane fonksiyonları @@ -241,7 +241,7 @@ module DiziOrnekleri = |> Array.iter (printfn "deÄŸer: %i. ") -module SeriOrnekleri = +module SeriÖrnekleri = // seriler kıvrık parantez kullanır let seri1 = seq { yield "a"; yield "b" } @@ -275,38 +275,38 @@ module SeriOrnekleri = // Veri Tipleri // ================================================ -module VeriTipiOrnekleri = +module VeriTipiÖrnekleri = // Bütün veriler varsayılan olarak deÄŸiÅŸtirilemezdir. + // -- Tuple oluÅŸturmak için virgül kullan + let ikiliTuple = 1, 2 + let üçlüTuple = "a", 2, true + // Tuple'lar çabuk ve kolay anonim tiplerdir. // paketi açmak için kalıp eÅŸleÅŸtirme kullan 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 Kisi = {birinci:string; Last:string} + type KiÅŸi = {Ad:string; Soyad:string} // "let" ile kıvrık parantezi record tipi oluÅŸturmak için kullan - let kisi1 = {birinci="John"; Last="Doe"} + let kiÅŸi1 = {Ad="Falanca"; Soyad="KiÅŸi"} // paketi açmak için kalıp eÅŸleÅŸtirme kullan - let {birinci = birinci} = kisi1 // birinci="John" + let {Ad = Ad} = kiÅŸi1 // birinci="John" // ------------------------------------ // Union tipleri (deÄŸiÅŸkenler olarak da bilinir) birden fazla - // seçeneÄŸe sahiptir. Belli bir zamanda sadece bir tanesi geçerlidir. + // seçeneÄŸe sahiptir. Belli bir zamanda sadece bir tanesi geçerlidir. // ------------------------------------ // "type" ile çubuk karakterini union tipi tanımlamak için kullan - type Derece = + type Sıcaklık = | Santigrat of float | Fahrenhayt of float @@ -315,25 +315,25 @@ module VeriTipiOrnekleri = let derece2 = Santigrat 37.0 // Paketi açmak için bütün seçenekler üzerinde kalıp eÅŸleÅŸtirme kullan - let dereceYazdir = function + let dereceYazdır = function | Santigrat t -> printfn "%f C" t | Fahrenhayt t -> printfn "%f F" t - dereceYazdir derece1 - dereceYazdir derece2 + dereceYazdır derece1 + dereceYazdır derece2 // ------------------------------------ // Yinelgen (Recursive) tipler // ------------------------------------ - // Tipler alt sınıflar oluÅŸturmadan karmaşık ÅŸekillerde - // yinelgen olarak birleÅŸtirilebilirler. - type Calisan = - | Isci of Kisi - | Yonetici of Calisan liste + // Tipler alt sınıflar oluÅŸturmadan karmaşık ÅŸekillerde + // yinelgen olarak birleÅŸtirilebilirler. + type Çalışan = + | İşçi of KiÅŸi + | Yönetici of Çalışan list - let falancaKisi = {birinci="John"; Last="Doe"} - let isci = Isci falancaKisi + let falancaKiÅŸi = {Ad="Falanca"; Soyad="KiÅŸi"} + let işçi = İşçi falancaKiÅŸi // ------------------------------------ // Tipleri Kullanarak Modelleme @@ -341,54 +341,54 @@ module VeriTipiOrnekleri = // Union tipleri bayrak kullanmadan durum modelleme için harikadır. type EpostaAdresi = - | GecerliEpostaAdresi of string - | GecersizEpostaAdresi of string + | GeçerliEpostaAdresi of string + | GeçersizEpostaAdresi of string - let epostaGondermeyiDene eposta = - match eposta with // kalıp eÅŸleÅŸtirme kullan - | GecerliEpostaAdresi adres -> () // gönder - | GecersizEpostaAdresi adres -> () // gönderme + let epostaGöndermeyiDene eposta = + match eposta with // kalıp eÅŸleÅŸtirme kullan + | GeçerliEpostaAdresi adres -> () // gönder + | GeçersizEpostaAdresi adres -> () // gönderme - // Union tiplerin record tiplerle birleÅŸimi - // domain driven design için iyi bir temel oluÅŸturur. + // 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 Urun = { UrunKodu: string; Miktar: int } - type Odeme = Odeme of float - type AktifSepetVerisi = { OdenmemisUrunler: Urun liste } - type OndenmisSepetVerisi = { OdenmisUrunler: Urun liste; Odeme: Odeme} + type Ürün = { ÜrünKodu: string; Miktar: int } + type Ödeme = Ödeme of float + type AktifSepetVerisi = { ÖdenmemişÜrünler: Ürün list } + type ÖdenmiÅŸSepetVerisi = { ÖdenmişÜrünler: Ürün list; Ödeme: Ödeme} - type AlisverisSepeti = + type AlışveriÅŸSepeti = | BosSepet // veri yok | AktifSepet of AktifSepetVerisi - | OdenmisSepet of OndenmisSepetVerisi + | ÖdenmiÅŸSepet of ÖdenmiÅŸSepetVerisi // ------------------------------------ // Tipler için içgüdüsel davranış // ------------------------------------ // Çekirdek tipler kendinden çok kullanışlı özelliklere sahiptir - // Ek kodlama gerektirmez + // Ek kodlama gerektirmez // * DeÄŸiÅŸmezlik // * Debug ederken yazdırma // * EÅŸitlik ve kıyaslama // * Serialization // %A kullanarak yazdırma - printfn "ikiliTuple=%A,\nKisi=%A,\nDerece=%A,\nCalisan=%A" - ikiliTuple kisi1 derece1 isci + printfn "ikiliTuple=%A,\nKiÅŸi=%A,\Sıcaklık=%A,\nÇalışan=%A" + ikiliTuple kiÅŸi1 derece1 işçi // EÅŸitlik ve kıyaslama içgüdüseldir. // İskambil kartlarıyla bir örnek - type Simge = Sinek | Karo | Maca | Kupa - type Sira = Iki | Uc | Dort | Bes | Alti | Yedi | Sekiz - | Dokuz | On | Bacak | Kiz | Papaz | As + type Simge = Sinek | Karo | Maça | Kupa + type Sıra = İki | Üç | Dört | BeÅŸ | Altı | Yedi | Sekiz + | Dokuz | On | Bacak | Kız | Papaz | As - let el = [ Sinek, As; Kupa, Uc; Kupa, As; - Maca, Bacak; Karo, Iki; Karo, As ] + let el = [ Sinek, As; Kupa, Üç; Kupa, As; + Maça, Bacak; Karo, İki; Karo, As ] // Sıralama - List.sirala el |> printfn "artarak dizilen el: %A" + List.sort el |> printfn "artarak dizilen el: %A" List.max el |> printfn "en yüksek kart: %A" List.min el |> printfn "en düşük kart: %A" @@ -397,7 +397,7 @@ module VeriTipiOrnekleri = // Aktif Kalıplar // ================================================ -module AktifKalipOrnekleri = +module AktifKalıpÖrnekleri = // F# "aktif kalıplar" denen bir kalıp eÅŸleÅŸtirmeye sahiptir. // Kalıplar dinamik bir ÅŸekilde tespit edilip eÅŸleÅŸtirilebilir. @@ -405,38 +405,38 @@ module AktifKalipOrnekleri = // Aktif kalıplar için söz dizimi (| ... |) ÅŸeklindedir // ÖrneÄŸin, karakter tiplerini eÅŸleyen bir "aktif" kalıp tanımlayın... - let (|Rakam|Harf|Bosluk|Diger|) karakter = + let (|Rakam|Harf|BoÅŸluk|DiÄŸer|) 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 + else if System.Char.IsWhiteSpace(karakter) then BoÅŸluk + else DiÄŸer // ... daha sonra eÅŸleme mantığı çok daha net yapmak için bunu kullanın - let karakterYazdir karakter = + let karakterYazdır karakter = match karakter with | Rakam -> printfn "%c bir rakamdır" karakter | Harf -> printfn "%c bir harftir" karakter - | Bosluk -> printfn "%c bir boÅŸluktur" karakter + | BoÅŸluk -> printfn "%c bir boÅŸluktur" karakter | _ -> printfn "%c baÅŸka bir ÅŸeydir" karakter // Bir liste yazdırma - ['a'; 'b'; '1'; ' '; '-'; 'c'] |> List.iter karakterYazdir + ['a'; 'b'; '1'; ' '; '-'; 'c'] |> List.iter karakterYazdır // ----------------------------------- // Aktif Kalıpları Kullanarak FizzBuzz // ----------------------------------- - // 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. - let (|UcunKati|_|) i = if i % 3 = 0 then Some UcunKati else None - let (|BesinKati|_|) i = if i % 5 = 0 then Some BesinKati else None + let (|ÜçünKatı|_|) i = if i % 3 = 0 then Some ÜçünKatı else None + let (|BeÅŸinKatı|_|) i = if i % 5 = 0 then Some BeÅŸinKatı else None // Ana fonksiyon let fizzBuzz i = match i with - | UcunKati & BesinKati -> printf "FizzBuzz, " - | UcunKati -> printf "Fizz, " - | BesinKati -> printf "Buzz, " + | ÜçünKatı & BeÅŸinKatı -> printf "FizzBuzz, " + | ÜçünKatı -> printf "Fizz, " + | BeÅŸinKatı -> printf "Buzz, " | _ -> printf "%i, " i // test @@ -446,50 +446,50 @@ module AktifKalipOrnekleri = // Sadelik // ================================================ -module AlgoritmaOrnekleri = +module AlgoritmaÖrnekleri = // F#'ın sinyal/gürültü oranı yüksektir, dolayısıyla // kod algoritmayla hemen hemen aynı görünür. // ------ Ö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 + let karelerToplamı n = + [1..n] // 1) 1'den n'e kadar bütün sayıları al + |> List.map kare // 2) hepsinin karesini al + |> List.sum // 3) sonuçları topla // test - karelerToplami 100 |> printfn "kareler toplamı = %A" + karelerToplamı 100 |> printfn "kareler toplamı = %A" // ------ Örnek: bir sıralama fonksiyonu tanımla ------ - let rec sirala liste = + let rec sırala liste = match liste with // Liste boÅŸsa | [] -> - [] // boÅŸ listeyi döndür + [] // boÅŸ listeyi döndür // Liste boÅŸ deÄŸilse - | ilkEleman::digerElemanlar -> // İlk elemanı al - let kucukElemanlar = // Daha küçük elemanları - digerElemanlar // diÄŸerlerinden ayır + | ilkEleman::diÄŸerElemanlar -> // İlk elemanı al + let küçükElemanlar = // Daha küçük elemanları + diÄŸerElemanlar // 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 + |> sırala // ve sırala + let büyükElemanlar = // Daha büyük elemanları + diÄŸerElemanlar // diÄŸerlerinden ayır |> List.filter (fun e -> e >= ilkEleman) - |> sirala // ve sırala + |> sırala // ve sırala // 3 parçayı birbirine ekle ve listeyi döndür - List.concat [kucukElemanlar; [ilkEleman]; buyukElemanlar] + List.concat [küçükElemanlar; [ilkEleman]; büyükElemanlar] // test - sirala [1; 5; 23; 18; 9; 1; 3] |> printfn "Sırala = %A" + sırala [1; 5; 23; 18; 9; 1; 3] |> printfn "Sırala = %A" // ================================================ // EÅŸzamansız kod // ================================================ -module EszamansizOrnegi = +module EÅŸzamansızÖrneÄŸi = // F# "pyramid of doom" durumuyla karşılaÅŸtırmayacak ÅŸekilde - // içgüdüsel eÅŸzamansız özelliklere sahiptir. + // içgüdüsel eÅŸzamansız özelliklere sahiptir. // // Bir sonraki örnek bir web sayfasını paralel bir ÅŸekilde indirir. @@ -499,16 +499,16 @@ module EszamansizOrnegi = open Microsoft.FSharp.Control.CommonExtensions // İçeriÄŸi eÅŸzamansız bir ÅŸekilde getir - let eszamansizUrlGetir url = + let eÅŸzamansızUrlGetir url = async { // "async" anahtar kelimesi ve kıvrık parantez // "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 akış = cevap.GetResponseStream() // "use" kullanılan bloÄŸun dışına çıkınca // close()'u otomatik olarak tetikler - use okuyucu = new IO.StreamReader(akis) + use okuyucu = new IO.StreamReader(akış) let html = okuyucu.ReadToEnd() printfn "İndirme tamamlandı: %s" url } @@ -522,76 +522,76 @@ module EszamansizOrnegi = // İndir 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 + |> List.map eÅŸzamansızUrlGetir // 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 NetUyumlulukOrnekleri = +module NetUyumlulukÖrnekleri = // F#, C#'ın yapabildiÄŸi hemen herÅŸeyi yapabilir, // ve .NET ve Mono kütüphaneleriyle tereyağından kıl çeker gibi çalışır. // ------- var olan kütüphane fonksiyonları ile çalışma ------- - let (i1success, i1) = System.Int32.TryParse("123"); - if i1success then printfn "parsed as %i" i1 else printfn "parse failed" + let (i1baÅŸarılı, i1) = System.Int32.TryParse("123"); + if i1baÅŸarılı then printfn "%i olarak dönüştürüldü" i1 else printfn "dönüştürme baÅŸarısız" - // ------- Arayüzleri yol üstünde tanımla! ------- + // ------- Arayüzleri yol üstünde tanımlayın! ------- // IDisposable'ı saÄŸlayan yeni bir nesne oluÅŸtur - let makeResource name = + let kaynakOluÅŸtur isim = { new System.IDisposable - with member this.Dispose() = printfn "%s disposed" name } + with member this.Dispose() = printfn "%s atıldı" isim } - let useAndDisposeResources = - use r1 = makeResource "birinci resource" - printfn "using birinci resource" + let kaynakKullanVeAt = + use r1 = kaynakOluÅŸtur "birinci kaynak" + printfn "birinci kaynağı kullanıyor" 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 "ikinci resource" - printfn "using ikinci resource" - printfn "done." + let kaynakİsmi = sprintf "\tiç kaynak %d" i + use geçici = kaynakOluÅŸtur kaynakİsmi + printfn "\t%s ile bir ÅŸey yap" kaynakİsmi + use r2 = kaynakOluÅŸtur "ikinci kaynak" + printfn "ikinci kaynağı kullanıyor" + printfn "bitti." // ------- Nesne yönelimli kod ------- // F# aynı zamanda tam bir nesne yönelimli dildir. // Sınıfları, kalıtımı ve sanal metotları destekler. - // Genel ipli bir arayüz + // Genel tipli bir arayüz type IEnumerator<'a> = - abstract member Current : 'a - abstract MoveNext : unit -> bool + abstract member Åžimdiki : 'a + abstract SonrakineGeç : unit -> bool // Sanal metotları olan soyut temel sınıflar [] - type Shape() = + type Åžekil() = // sadece okunabilir özellikler - abstract member Width : int with get - abstract member Height : int with get + abstract member GeniÅŸlik : int with get + abstract member Yükseklik : int with get // sanal olmayan metot - member this.BoundingArea = this.Height * this.Width + member this.ÇevreleyenAlan = this.Yükseklik * this.GeniÅŸlik // temel uygulamasıyla bir sanal metot - abstract member Print : unit -> unit - default this.Print () = printfn "I'm a shape" + abstract member Yazdır : unit -> unit + default this.Yazdır () = printfn "Ben bir ÅŸekil (önümden çekil!)" // Somut bir sınıfın soyut sınıftan kalıtımı - type Rectangle(x:int, y:int) = - inherit Shape() - override this.Width = x - override this.Height = y - override this.Print () = printfn "I'm a Rectangle" + type Dikdörtgen(x:int, y:int) = + inherit Åžekil() + override this.GeniÅŸlik = x + override this.Yükseklik = y + override this.Yazdır () = printfn "Ben bir dikdörtgenim" // test - let r = Rectangle(2, 3) - printfn "The width is %i" r.Width - printfn "The area is %i" r.BoundingArea - r.Print() + let r = Dikdörtgen(2, 3) + printfn "GeniÅŸlik: %i" r.GeniÅŸlik + printfn "Çevreleyen Alan: %i" r.ÇevreleyenAlan + r.Yazdır() // ------- ekleme metotları ------- @@ -600,26 +600,26 @@ module NetUyumlulukOrnekleri = member this.StartsWithA = this.StartsWith "A" // test - let s = "Alice" - printfn "'%s' starts with an 'A' = %A" s s.StartsWithA + let s = "Ahmet" + printfn "'%s' 'A' ile baÅŸlar = %A" s s.StartsWithA // ------- olaylar ------- - type MyButton() = - let clickEvent = new Event<_>() + type Butonum() = + let tıklamaOlayı = new Event<_>() [] - member this.OnClick = clickEvent.Publish + member this.OnClick = tıklamaOlayı.Publish - member this.TestEvent(arg) = - clickEvent.Trigger(this, arg) + member this.DenemeOlayı(arg) = + tıklamaOlayı.Trigger(this, arg) // test - let myButton = new MyButton() - myButton.OnClick.topla(fun (sender, arg) -> - printfn "Click event with arg=%O" arg) + let butonum = new Butonum() + butonum.OnClick.Add(fun (sender, arg) -> + printfn "arg=%O ile beraber bir tıklama olayı" arg) - myButton.TestEvent("Hello World!") + butonum.DenemeOlayı("Merhaba Dünya!") ``` -- cgit v1.2.3 From 02fb96d6998df7f5ecfc3b546d323547c135584e Mon Sep 17 00:00:00 2001 From: Adam Bard Date: Mon, 25 Apr 2016 22:51:05 -0700 Subject: Update fsharp-tr.html.markdown --- tr-tr/fsharp-tr.html.markdown | 1 + 1 file changed, 1 insertion(+) (limited to 'tr-tr') diff --git a/tr-tr/fsharp-tr.html.markdown b/tr-tr/fsharp-tr.html.markdown index d88e2594..8c47397c 100644 --- a/tr-tr/fsharp-tr.html.markdown +++ b/tr-tr/fsharp-tr.html.markdown @@ -5,6 +5,7 @@ contributors: translators: - ["Mustafa Zengin", "http://zengin.github.com/"] filename: learnfsharp-tr.fs +lang: tr-tr --- F# fonksiyonel ve nesne yönelimli, genel amaçlı bir programlama dilidir. Bedava ve açık kaynaklıdır ve Linux, Mac, Windows ve dahasında çalışır. -- cgit v1.2.3 From 2e6c386e9b1e742ac015ab424b3cf0f456c8d550 Mon Sep 17 00:00:00 2001 From: Mustafa Zengin Date: Wed, 27 Apr 2016 23:56:57 -0700 Subject: TypeScript Turkish translation (#2246) --- tr-tr/typescript-tr.html.markdown | 180 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 tr-tr/typescript-tr.html.markdown (limited to 'tr-tr') diff --git a/tr-tr/typescript-tr.html.markdown b/tr-tr/typescript-tr.html.markdown new file mode 100644 index 00000000..1bf674c6 --- /dev/null +++ b/tr-tr/typescript-tr.html.markdown @@ -0,0 +1,180 @@ +--- +language: TypeScript +contributors: + - ["Philippe Vlérick", "https://github.com/pvlerick"] +translators: + - ["Mustafa Zengin", "http://zengin.github.com"] +filename: learntypescript-tr.ts +lang: tr-tr +--- + +TypeScript, JavaScript'le yazılmış büyük ölçekli uygulamaların geliÅŸtirilmesini kolaylaÅŸtırmayı hedefleyen bir dildir. +TypeScript, JavaScript'e sınıflar, modüller, arayüzler, jenerik tipler ve (isteÄŸe baÄŸlı) static tipleme gibi genel konseptler ekler. +JavaScript, TypeScript'in bir alt kümesidir: Bütün JavaScript kodları geçerli birer TypeScript kodudur ve sorunsuz herhangi bir projeye eklenebilirler. TypeScript derleyici JavaScript kodu üretir. + +Bu makale sadece TypeScript'e ait ekstra söz dizimini konu alır, JavaScript için bkz: [JavaScript] (../javascript/). + +TypeScript derleyiciyi test etmek için [Playground] (http://www.typescriptlang.org/Playground)'a gidin. Orada otomatik tamamlama ile kod yazabilecek ve üretilen JavaScript'i görebileceksiniz. + +```js +// TypeScript'te üç ana tip vardır. +var bittiMi: boolean = false; +var satırlar: number = 42; +var isim: string = "Anders"; + +// Tipin bilinmediÄŸi zamanlar için "Any" tipi +var bilinmiyor: any = 4; +bilinmiyor = "belki de bir string'dir"; +bilinmiyor = false; // tamam, boolean olsun + +// Kolleksiyon olarak, tipli ve jenerik diziler +var liste: number[] = [1, 2, 3]; +// Alternatif olarak jenerik Array tipi +var liste: Array = [1, 2, 3]; + +// 'enum' tipleri: +enum Renk {Kırmızı, YeÅŸil, Mavi}; +var r: Renk = Renk.YeÅŸil; + +// Son olarak, "void" hiç bir ÅŸey döndürmeyen fonksiyonlarda kullanılan tiptir. +function çokFeciBirUyarı(): void { + alert("Ben biraz sinir bozucuyum!"); +} + +// Fonksiyonlar birinci sınıf vatandaÅŸlardır ve "kalın ok" lambda söz dizimi "=>" +// ve tip çıkarımı kullanırlar. +// AÅŸağıda listelenenler birbirinin aynısı ve derleyici aynı fonksiyon yapısını +// çıkaracak ve aynı JavaScript kodunu üretecektir +var f1 = function(i: number): number { return i * i; } +// Döndürülen tip tip çıkarımıyla belirlendi +var f2 = function(i: number) { return i * i; } +var f3 = (i: number): number => { return i * i; } +// Döndürülen tip tip çıkarımıyla belirlendi +var f4 = (i: number) => { return i * i; } +// Döndürülen tip tip çıkarımıyla belirlendi +// Tek satırlık yazımda "return" anahtar kelimesine ihtiyaç yok. +var f5 = (i: number) => i * i; + +// Arayüzler yapısaldır, listelenen özelliklere sahip her ÅŸey arayüzle uyumludur. +interface KiÅŸi { + isim: string; + // İsteÄŸe baÄŸlı özellikler "?" ile iÅŸaretlenir + yaÅŸ?: number; + // Ve fonksiyonlar... + hareketEt(): void; +} + +// "KiÅŸi" arayüzünü kullanan bir nesne +// isim ve hareketEt özelliklerine sahip olduÄŸu için KiÅŸi olarak kullanılabilir. +var p: KiÅŸi = { isim: "Anders", hareketEt: () => {} }; +// İsteÄŸe baÄŸlı özelliÄŸe sahip bir KiÅŸi +var geçerliKiÅŸi: KiÅŸi = { isim: "Anders", yaÅŸ: 42, hareketEt: () => {} }; +// Geçersiz bir kiÅŸi, çünkü yaÅŸ bir sayı (number) tipi deÄŸil +var geçersizKiÅŸi: KiÅŸi = { isim: "Anders", yaÅŸ: true }; + +// Arayüzler bir fonksiyon tipi de ifade edebilirler +interface aramaFonksiyonu { + (kaynak: string, altString: string): boolean; +} + +// Parametrelerin sadece tipleri önemli, isimleri önemli deÄŸil +var benimAramam: aramaFonksiyonu; +benimAramam = function(kynk: string, alt: string) { + return kynk.search(alt) != -1; +} + +// Sınıflar - üyeler (members) varsayılan olarak public'tir. +class Nokta { + // Özellikler + x: number; + + // Yapıcı (constructor) - bu baÄŸlamdaki public/private anahtar kelimeleri + // özellikler için gerekli demirbaÅŸ kodu oluÅŸturur ve ilk deÄŸerlerin + // atanmasını saÄŸlar. + // Bu örnekte, "y" de "x" gibi tanımlanacak is, but with less code + // Default values are also supported + + constructor(x: number, public y: number = 0) { + this.x = x; + } + + // Fonksiyonlar + mesafe() { return Math.sqrt(this.x * this.x + this.y * this.y); } + + // Statik üyeler + static orijin = new Nokta(0, 0); +} + +var p1 = new Nokta(10 ,20); +var p2 = new Nokta(25); //y = 0 + +// Kalıtım +class Nokta3Boyutlu extends Nokta { + constructor(x: number, y: number, public z: number = 0) { + super(x, y); // süper sınıfın yapıcısını çağırmak zorunlu + } + + // yeniden tanımlama + mesafe() { + var d = super.mesafe(); + return Math.sqrt(d * d + this.z * this.z); + } +} + +// Modüller, "." alt modülleri ayırmak için kullanılabilir +module Geometri { + export class Kare { + constructor(public kenarUzunluÄŸu: number = 0) { + } + alan() { + return Math.pow(this.kenarUzunluÄŸu, 2); + } + } +} + +var s1 = new Geometri.Kare(5); + +// Modüle atıfta bulunmak için yerel takma ad +import G = Geometri; + +var s2 = new G.Kare(10); + +// Jenerik Tipler +// Sınıflar +class Tuple { + constructor(public item1: T1, public item2: T2) { + } +} + +// Arayüzler +interface Çift { + item1: T; + item2: T; +} + +// Ve fonksiyonlar +var çifttenTupleÜret = function(p: Çift) { + return new Tuple(p.item1, p.item2); +}; + +var tuple = çifttenTupleÜret({ item1:"merhaba", item2:"dünya"}); + +// Tanım dosyasına atıfta bulunma: +/// + +// Åžablon Stringleri (ters apostrof kullanan stringler) +// Åžablon Stringlerinin kullanımı +var isim = 'Anders'; +var selamlama = `Merhaba ${isim}, nasılsın?` +// Åžablon Stringleri ile çok satırlı stringler +var çokSatırlıString = `Bu çok satırlı +bir string örneÄŸi`; + +``` + +## Daha fazlası + * [TypeScript Resmi Sitesi] (http://www.typescriptlang.org/) + * [TypeScript dil spesifikasyonu (pdf)] (http://go.microsoft.com/fwlink/?LinkId=267238) + * [Anders Hejlsberg - Channel 9'da TypeScript'e GiriÅŸ] (http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript) + * [GitHub'ta Açık Kaynak Kodu] (https://github.com/Microsoft/TypeScript) + * [Definitely Typed - tip tanımları için kaynak] (http://definitelytyped.org/) -- cgit v1.2.3 From 98abad6935b77e66a4b8f2ddff340d57dbfeb173 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 31 Aug 2016 15:18:38 -0700 Subject: Remove redundant nl markdown and fix fortran file --- tr-tr/c-tr.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tr-tr') diff --git a/tr-tr/c-tr.html.markdown b/tr-tr/c-tr.html.markdown index 2d4240ed..33544765 100644 --- a/tr-tr/c-tr.html.markdown +++ b/tr-tr/c-tr.html.markdown @@ -202,7 +202,7 @@ int main() { 0x02 >> 1; // => 0x01 (bitwise right shift (by 1)) // Isaretli sayilari kaydirirken dikkatli olun - tanimsizlar sunlardir: - // - isaretli sayinin isaret bitinde yapÄilan kaydirma (int a = 1 << 32) + // - isaretli sayinin isaret bitinde yap?ilan kaydirma (int a = 1 << 32) // - negatif sayilarda sol kaydirma (int a = -1 << 2) // - LHS tipinde >= ile olan ofset genisletmelerde yapilan kaydirma: // int a = 1 << 32; // UB if int is 32 bits wide -- cgit v1.2.3 From 20b2a9a29d485a52b8ab455b6b0fae65678174ef Mon Sep 17 00:00:00 2001 From: ven Date: Sat, 28 Jan 2017 10:22:30 +0100 Subject: Fix swift-tr filename fixes #2635 --- tr-tr/swift-tr.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tr-tr') diff --git a/tr-tr/swift-tr.html.markdown b/tr-tr/swift-tr.html.markdown index 15056bb8..e694d95d 100644 --- a/tr-tr/swift-tr.html.markdown +++ b/tr-tr/swift-tr.html.markdown @@ -2,7 +2,7 @@ language: swift contributors: - ["Özgür Åžahin", "https://github.com/ozgurshn/"] -filename: learnswift.swift +filename: learnswift-tr.swift lang: tr-tr --- -- cgit v1.2.3 From 305ca3611d1de1e5625bca743c0fcef7e4ccd535 Mon Sep 17 00:00:00 2001 From: cemyaras Date: Wed, 15 Mar 2017 11:07:29 +0200 Subject: dynamic-programming-tr (#2667) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * dynamic-programming-tr Türkçe çeviri * Rename dynamic-programming-tr to dynamic-programming-tr.html.markdown added ".html.markdown" to the filename --- tr-tr/dynamic-programming-tr.html.markdown | 44 ++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 tr-tr/dynamic-programming-tr.html.markdown (limited to 'tr-tr') diff --git a/tr-tr/dynamic-programming-tr.html.markdown b/tr-tr/dynamic-programming-tr.html.markdown new file mode 100644 index 00000000..1900ee93 --- /dev/null +++ b/tr-tr/dynamic-programming-tr.html.markdown @@ -0,0 +1,44 @@ +--- +language: Dynamic Programming +contributors: + - ["Akashdeep Goel", "https://github.com/akashdeepgoel"] +translators: + - ["Mehmet Cem YaraÅŸ", "https://www.linkedin.com/in/yarascem/"] +lang: tr-tr +--- + +Dinamik Programlama +GiriÅŸ +Dinamik Programlama, göreceÄŸimiz gibi belirli bir problem sınıfını çözmek için kullanılan güçlü bir tekniktir. Fikir çok basittir, verilen girdiyle ilgili bir sorunu çözdüyseniz, aynı sorunun tekrar çözülmesini önlemek için sonucunu gelecekte referans olarak kaydedilmesine dayanır. + +Her zaman hatırla! "GeçmiÅŸ hatırlayamayanlar, aynı ÅŸeyleri tekrar yaÅŸamaya mahkumlardır!" + +Bu tür sorunların çözüm yolları + +1-Yukarıdan aÅŸağıya: +Verilen problemi çözerek çözmeye baÅŸlayın. Sorunun zaten çözüldüğünü görürseniz, kaydedilen cevabı döndürmeniz yeterlidir. ÇözülmemiÅŸse, çözünüz ve cevabı saklayınız. Bu genellikle düşünmek kolaydır ve çok sezgiseldir. Buna EzberleÅŸtirme denir. + +2-AÅŸağıdan yukarıya: +Sorunu analiz edin ve alt problemlerin çözülme sırasını görün ve önemsiz alt sorundan verilen soruna doÄŸru baÅŸlayın. Bu süreçte, problemi çözmeden önce alt problemlerin çözülmesi gerekmektedir. Buna Dinamik Programlama denir. + +Örnek +En Uzun Artan Subsequence problemi belirli bir dizinin en uzun artan alt dizini bulmaktır. S = {a1, a2, a3, a4, ............., an-1} dizisi göz önüne alındığında, en uzun bir alt kümeyi bulmak zorundayız, böylece tüm j ve i, j için a[j] and LS[i]