Tag Archives: c#

Sıfırdan C# Programlama Eğitim Seti – 6. Ders

►► Sıfırdan C# Programlama Eğitim Seti – 6. Ders

Bu yayınla C# programlama dilini temelinden anlatacağım eğitim setinin altıncı dersini tamamlamış olduk. Bu video serisi, genellikle hafta sonları Youtube üzerinde yapacağımız canlı yayınlar ile devam edecek.

6. Ders İçeriği;

0:00:00​ | Giriş

0:15:30 | ref locals ve ref returns kullanımı

0:30:20 | var kullanımı (c# 3.0)

0:39:59 | void kullanımı

0:42:16 | assignment expressions

0:51:49 | null coalescing operator (??)

0:56:07 | null coalescing assignment operator (??=) (c# 8.0)

1:02:35 | null-conditional operator (?.) (elvis operatörü)

1:15:27 | switch expression (c# 8.0)

Konularla ilgili faydalı linkler:

► Ref locals ve ref returns: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/ref-returns

► var anahtar sözcüğü: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/var

► void anahtar sözcüğü: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/void

► ?? ve ??= operatörleri: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator

► ?. operatörü: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/member-access-operators#null-conditional-operators–and-

► switch expression: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/switch-expression

Sıfırdan C# Programlama Eğitim Seti – 5. Ders

►► Sıfırdan C# Programlama Eğitim Seti – 5. Ders

Bu yayınla C# programlama dilini temelinden anlatacağım eğitim setinin beşinci dersini tamamlamış olduk. Bu video serisi, genellikle hafta sonları Youtube üzerinde yapacağımız canlı yayınlar ile devam edecek.

Çok boyutlu diziler

Jagged array kavramı

Değişkenler ve parametreler

Yerel değişkenler

Varsayılan değerler (default values)

Parametre geçişleri (değer ile veya referans ile geçiş)

discard kavramı (C# 7.0)

in modifier

params modifier

Optional arguments (opsiyonel argümanlar)

named arguments

Konularla ilgili faydalı linkler:

► Multidimensional Arrays: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/multidimensional-arrays

► Jagged Arrays: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/jagged-arrays

► Default values of C# types: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/default-values

► Passing Parameters: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/passing-parameters

► Discards: https://docs.microsoft.com/en-us/dotnet/csharp/discards

► in parameter modifier: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/in-parameter-modifier

► params: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/params

► Named and Optional Arguments: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments

Sıfırdan C# Programlama Eğitim Seti – 4. Ders

► Sıfırdan C# Programlama Eğitim Seti – 4. Ders

Bu yayınla C# programlama dilini temelinden anlatacağım eğitim setinin dördüncü dersini tamamlamış olduk. Bu video serisi, genellikle hafta sonları Youtube üzerinde yapacağımız canlı yayınlar ile devam edecek.

4. Ders İçeriği;

0:00:00​ | Giriş

0:16:42 | Eşitlik ve karşılaştırma operatörleri

0:31:27 | Conditional operatörler

0:37:04 | Short circuit evaluation kavramı

0:40:29 | Ternary operatörü (a ? b : c)

0:45:09 | Char tipi

0:47:35 | Escape sequence karakterleri

0:57:17 | String tipi

1:10:13 | Verbatim string literals

1:16:32 | String concatenation (birleştirme)

1:25:54 | String interpolation (C# 6.0)

1:36:16 | Diziler

1:47:10 | Dizilerde elemanların default değerleri

1:58:43 | Index kavramı (C# 8.0)

2:06:56 | Range kavramı (C# 8.0)

Konularla ilgili faydalı linkler:

► What is short circuiting and how is it used when programming in Java?: https://stackoverflow.com/q/9344305/447156

► Ternary operator: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator

► Escape sequence karakterleri: https://docs.microsoft.com/en-us/cpp/c-language/escape-sequences?view=msvc-160

► Verbatim string literals: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/verbatim

► String interpolation: https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/string-interpolation

► System.Index: https://docs.microsoft.com/en-us/dotnet/api/system.index?view=net-5.0

► System.Range: https://docs.microsoft.com/en-us/dotnet/api/system.range?view=net-5.0

Sıfırdan C# Programlama Eğitim Seti – 3. Ders

Bu yayınla C# programlama dilini temelinden anlatacağım eğitim setinin üçüncü dersini tamamlamış olduk. Bu video serisi, genellikle hafta sonları Youtube üzerinde yapacağımız canlı yayınlar ile devam edecek.

3. Ders İçeriği;

Nümerik tiplerde type inference

Nümerik suffix kavramı

Tam sayı çevrimler

Noktalı sayı çevrimleri

Decimal çevrimleri

Aritmetik operatörler

Tam sayılarda Overflow mantığı

checked – unchecked kavramları

8 bit ve 16 bit tam sayılar

NaN, pozitif ve negatif sonsuz ve -0

double ve decimal karşılaştırması

Ayrıca videonun sonunda karıştırdığım 0.1f + 0.2f == 0.3f kısmının neden true olduğunu anladım. Durum şuymuş; “bunun her zaman true olacağına dair bir kesinlik yok”. Bu durumda CPU (veya sistemin tamamı) bunun nasıl hesaplanacağına kendisi karar veriyor anladığım kadarıyla. (Şu Stack Overflow sorusuna göz atabilirsiniz: https://stackoverflow.com/q/15117037/447156) Eric Lippert’in cevabını birkaç defa okumanızı tavsiye ederim, muazzam yazılmış. Ayrıca bu soruya ben de 8 sene önce cevap vermişim ama tamamen aklımdan çıkmış 🙂

Şöyle diyor üstad;

“The compiler and the runtime are permitted to do so however they feel like it at the time. They need not be consistent from machine to machine, from run to run, and so on. Since this can only make calculations more accurate this is not considered a bug. It’s a feature. A feature that makes it incredibly difficult to write programs that behave predictably, but a feature nevertheless.”

Örneğin; Rextester içerisinde (https://rextester.com/FPD61501) true döndürürken, aynı kod DotNetFiddle içerisinde (https://dotnetfiddle.net/BkaDOo) false döndürüyor. Buradan da bu durumu anlamış oluyoruz.

Sıfırdan C# Programlama Eğitim Seti – 2. Ders

Bu yayınla C# programlama dilini temelinden anlatacağım eğitim setinin ikinci dersini tamamlamış olduk. Bu video serisi, genellikle hafta sonları Youtube üzerinde yapacağımız canlı yayınlar ile devam edecek.

Eğitim sırasında interaktif olarak soru-cevap kısımlarımız olmakta. Bu nedenle benimle birlikte siz de kodlama yapabilirsiniz.

► Eğitim kimler için? C# dilini öğrenmek isteyen herkes için. Olabildiğince en basit seviyede anlatmaya çalışıyorum. Fakat her seviyedeki arkadaş için ideal bir eğitim seti olacağından eminim.

► Ücretsiz mi? Tamamen ücretsiz. Derslerin tamamı önce Youtube üzerinde canlı yayınla olacak, yayın bittikten sonra da düzenleme yapılıp videolar kısmından ulaşabilirsiniz.

► Canlı yayınlar ne zaman oluyor? Henüz belli değil, fakat kaçırmamak için kanala abone olmayı ve notification kısmını aktif etmenizi tavsiye ederim. Şu andaki düşüncem haftada bir canlı yayın. Eğer yoğun talep olursa haftada iki defa yapabiliriz.

► Eğitim kaç hafta sürecek? C# programlama dilinin geniş bir dil. Konu çok. Bende anlatma hevesi de öyle. Siz istedikçe, sizler talep ettikçe eğitimler devam edecek.

► Eğitimde hangi araçlar kullanıyorsun? Microsoft Visual Studio 2019 (https://visualstudio.microsoft.com/tr/), Linqpad (https://www.linqpad.net/) ve Microsoft Whiteboard (https://www.microsoft.com/tr-tr/p/microsoft-whiteboard/9mspc6mp8fm4?activetab=pivot:overviewtab) kullanıyorum.

► Eğitimde biz hangi araçları kullanabiliriz? Benim kullandığım araçları bilgisayarınıza kurmanızı tavsiye ederim, fakat bilgisayarınızda kurulu değilse online olan C# editörlerinden birini de kullanabilirsiniz. Tavsiye olarak DotNetFiddle https://dotnetfiddle.net/, Ideone https://ideone.com/, Csharppad https://csharppad.com/, Repl.it https://repl.it/languages/csharp ve Rextester https://rextester.com/ verebilirim. Hangisini seçeceğiniz tamamen size kalmış.

2. Ders İçeriği;

Anahtar sözcükler ve kullanımları

C#’ta yorumlar

Temel veri tipleri

const kullanımı

Custom tip oluşturmak

Conversation (implicit ve explicit)

Değer tipleri ve referans tipleri

Tam sayılar, noktalı sayılar

alias kullanımı

Nümerik ve binary literaller (c# 7.0)

Faydalı linkler:

► C# Keywords: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/

► Document your code with XML comments: https://docs.microsoft.com/en-us/dotnet/csharp/codedoc

► Types (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/

► const (C# Reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/const

► Casting and type conversions (C# Programming Guide): https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/casting-and-type-conversions

► Value types (C# reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types

► Reference types (C# Reference): https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types

► Integer literals: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types#integer-literals

Asal Çarpanları Bulma Algoritması

Bir sayıyı oluşturan asal çarpanların nasıl en efektif şekilde bulunabileceğini anlattım bu videoda. Önemli olan iki nokta var; birincisi kontrol edeceğimiz sayıları verilen sayının kareköküne kadar (karekökü dahil) iterasyon ile kontrol etmek ve elimizdeki sayıyı bölebildiğimiz kadar o sayıya bölmek, ikincisi de eğer bu iterasyon sonrası sayımız 1’e eşit olmadıysa (videoda anlattığım 99 örneği gibi) son kalanı da listeye eklemek.

► Asal çarpan nedir? https://tr.wikipedia.org/wiki/Asal_%C3%A7arpan

Asal çarpan, bir sayının asal olan çarpanlarına denir. Örnek olarak 72 sayısının asal çarpanları 2 ve 3’ken (2^3 * 3^2), 4, 6, 8, 9, 12, 18, 24, 36, 72 asal çarpan değildir. Aritmetiğin temel teoremine göre bütün bileşik sayılar, asal çarpanların çarpımı olarak yazılabilmektedir.

        /// <summary>
        /// Sayının tüm asal çarpanlarını bulma
        /// </summary>
        static IList<int> PrimeFactors(int n)
        {
            var factors = new List<int>();

            for(var i = 2; i <= Math.Sqrt(n); i++)
            {
                while(n % i == 0)
                {
                    n /= i;
                    factors.Add(i);
                }
            }

            if (n != 1)
                factors.Add(n);

            return factors;
        }

Sıfırdan C# Programlama Eğitim Seti – 1. Ders

Bu yayınla C# programlama dilini temelinden anlatacağım eğitim setinin ilk dersini tamamlamış olduk. Bu video serisi, genellikle hafta sonları Youtube üzerinde yapacağımız canlı yayınlar ile devam edecek.

Eğitim sırasında interaktif olarak soru-cevap kısımlarımız olmakta. Bu nedenle benimle birlikte siz de kodlama yapabilirsiniz.

► Eğitim kimler için? C# dilini öğrenmek isteyen herkes için. Olabildiğince en basit seviyede anlatmaya çalışıyorum. Fakat her seviyedeki arkadaş için ideal bir eğitim seti olacağından eminim.

► Ücretsiz mi? Tamamen ücretsiz. Derslerin tamamı önce Youtube üzerinde canlı yayınla olacak, yayın bittikten sonra da düzenleme yapılıp videolar kısmından ulaşabilirsiniz.

► Canlı yayınlar ne zaman oluyor? Henüz belli değil, fakat kaçırmamak için kanala abone olmayı ve notification kısmını aktif etmenizi tavsiye ederim. Şu andaki düşüncem haftada bir canlı yayın. Eğer yoğun talep olursa haftada iki defa yapabiliriz.

► Eğitim kaç hafta sürecek? C# programlama dilinin geniş bir dil. Konu çok. Bende anlatma hevesi de öyle. Siz istedikçe, sizler talep ettikçe eğitimler devam edecek.

► Eğitimde hangi araçlar kullanıyorsun? Microsoft Visual Studio 2019 (https://visualstudio.microsoft.com/tr/), Linqpad (https://www.linqpad.net/) ve Microsoft Whiteboard (https://www.microsoft.com/tr-tr/p/microsoft-whiteboard/9mspc6mp8fm4?activetab=pivot:overviewtab) kullanıyorum.

► Eğitimde biz hangi araçları kullanabiliriz? Benim kullandığım araçları bilgisayarınıza kurmanızı tavsiye ederim, fakat bilgisayarınızda kurulu değilse online olan C# editörlerinden birini de kullanabilirsiniz. Tavsiye olarak DotNetFiddle https://dotnetfiddle.net/, Ideone https://ideone.com/, Csharppad https://csharppad.com/, Repl.it https://repl.it/languages/csharp ve Rextester https://rextester.com/ verebilirim. Hangisini seçeceğiniz tamamen size kalmış.

Tekrar edeyim, bu eğitim seti için herhangi bir programlama bilgisi tecrübeniz olması gerekmiyor. Fakat temel programlama tecrübenizin olması size eğitimde büyük avantaj sağlayacaktır.

1. Ders İçeriği;

Giriş

C# Nedir?

Unified Type System nedir?

C# dosyalarını command line ile çalıştırmak

Değer tipleri ve Referans tipleri

Expression kavramı, operand ve operatörler

const kullanımı

Postfix ve Prefix operatörleri, x++ ve –x

If-else if-else kullanımı

var kullanımı

switch kullanımı

while kullanımı

do-while kullanımı

for kullanımı

break kullanımı

continue kullanımı

Method parametreleri

ref parametre kullanımı

out parametre kullanımı

Dizi (array) kavramına giriş

Çok boyutlu dizilere giriş

Jagged array kavramı

NOT: Videoda bazı yerlerde ses sorunları olmuş, çok fazla fark edilmiyorlar ama bazen rahatsız edici olabiliyor, kusura bakmayın.

C# 9.0 Yenilikleri – Top-level Statements

C# 9.0 versiyonu ile gelen “top-level statements” özelliğine göz attık videoda. Özellikle C#’a yeni başlayan kişiler için kod yazmayı daha basit hale getirdiğini düşündüğüm bir yapı.

Şimdi boş bir konsol uygulaması oluşturduğunuz düşünelim, karşınıza gelen kod bloğu şu şekilde oluyor;

using System;

namespace ConsoleNetCoreTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Yeni başlayan kişiler için, using, namespace, static, void, Main, diziler, args gibi birçok bilmediği yapı var bu boilerplate kod içerisinde. Bunlar kafa karıştırıcı olabiliyor.

.NET 5 ile birlikte gelen C# 9.0 versiyonunda, statement’ları direkt olarak dosyanızın en üstünde yazabiliyorsunuz. Bu nedenle namespace, class, Main gibi kısımları yazmamanıza gerek kalmıyor. Bu sayede başlangıç seviyesindeki kişiler için daha basit bir şekilde kod yazma imkanı oluşuyor.

.NET 5 ile geldiği için öncelikle .csproj dosyanızdaki “TargetFramework” kısmını “net5.0” olarak düzenlemeniz gerekiyor. Tabi bunu videodaki gibi projenin properties kısmından da düzenleyebiliyorsunuz .NET 5.0’ı seçerek.

using System;
Console.WriteLine("Hello World!");

Peki Main metodu olmadan işletim sistemi başlangıç noktasını nereden biliyor? Aslında IL koduna baktığınızda, hala compiler arka tarafta “Program” adında bir sınıf ve “Main” adında bir metod oluşturuyor. Sadece bunun açık bir şekilde yazılmasına gerek kalmıyor artık. Hatta “args” kısmını da direkt olarak kullanabiliyorsunuz sihirli bir şekilde. Örneğin command line üzerinden parametre gönderdiğinizde “args” ile bunları direkt alabiliyorsunuz.

using System;
if (args.Length != 0)
{
    foreach (var arg in args)
    {
        Console.WriteLine(arg);
    }
}

Birkaç kural;

► Sadece tek bir dosyanız top-level statement’a sahip olabiliyor “Main” mantığı gereği. Bir başka dosya içerisinde top-level statement yazmaya çalıştığınızda hata alıyorsunuz.

► Top-level statement’lar, içerisinde kullandığınız başka sınıf tanımlarının da üstünde olmalıdır. Önce sınıf tanımını yapıp sonra statement’ı yazdığınızda hata alırsınız. Hatta bu tanımlamaları yaptığınız IL koduna bakarsanız, bu Person sınıfının sanki farklı bir .cs dosyası içerisindeymiş gibi oluştuğunu görürsünüz. Yani C# derleyicisi önce bi “top-level statements”ları alıp, Program sınıfı ve Main metodu için derler, geri kalan tiplerin hepsini de ayrı bir C# tipi gibi derleme yapar.

► Son söz olarak;

Bence bu özellik C# dili ile daha kolay bir şekilde “oynamamızı” sağlıyor. Özellikle C#’ı yeni öğrenmeye başlayan kişiler için ve küçük kod yazımları bakımından gayet faydalı olduğunu düşünüyorum. Kaynaklar:

► Top-level statements: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/top-level-statements

► Exploring top-level statements in C# 9 https://www.tabsoverspaces.com/233831-exploring-top-level-statements-in-csharp-9

► Exploring top-level statements in C# 9 https://www.reddit.com/r/programming/comments/h0uycm/exploring_toplevel_statements_in_c_9/

► İncelemek isterseniz Linqpad: https://www.linqpad.net/

LeetCode Çözümlerİ – 929. Unique E-Mail Address [Google Mülakat Sorusu]

LeetCode içerisinde bulunan “Unique E-Mail Address”‘ sorusunun açıklaması ve çözümü. Bu soruda verilen email adreslerinden mail adresi kuralları ile tekil olanları döndürmeniz iztenmekte. LeetCode’a göre Google mülakatlarında sorulmuş sorulardan biri.

🔥 LeetCode 929. Unique E-Mail Address https://leetcode.com/problems/unique-email-addresses/

➡️ Problem açıklaması:

Every email consists of a local name and a domain name, separated by the @ sign.

For example, in alice@leetcode.com, alice is the local name, and leetcode.com is the domain name.

Besides lowercase letters, these emails may contain ‘.’s or ‘+’s.

If you add periods (‘.’) between some characters in the local name part of an email address, mail sent there will be forwarded to the same address without dots in the local name. For example, “alice.z@leetcode.com” and “alicez@leetcode.com” forward to the same email address. (Note that this rule does not apply for domain names.)

If you add a plus (‘+’) in the local name, everything after the first plus sign will be ignored. This allows certain emails to be filtered, for example m.y+name@email.com will be forwarded to my@email.com. (Again, this rule does not apply for domain names.)

It is possible to use both of these rules at the same time.

Given a list of emails, we send one email to each address in the list. How many different addresses actually receive mails?

Example 1:

Input: [“test.email+alex@leetcode.com”,”test.e.mail+bob.cathy@leetcode.com”,”testemail+david@lee.tcode.com”]

Output: 2

Explanation: “testemail@leetcode.com” and “testemail@lee.tcode.com” actually receive mails

Note:

1 LessOrSmaller= emails[i].length LessOrSmaller= 100

1 LessOrSmaller= emails.length LessOrSmaller= 100

Each emails[i] contains exactly one ‘@’ character.

All local and domain names are non-empty.

Local names do not start with a ‘+’ character.

LeetCode Çözümlerİ – 917. Reverse Only Letters [Microsoft Mülakat Sorusu]

LeetCode içerisinde bulunan “Reverse Only Letters”‘ sorusunun açıklaması ve çözümü. Bu soruda verilen sadece string içerisindeki harfleri tersinden yazdırmanız isteniyor. LeetCode’a göre Microsoft mülakatlarında sorulmuş sorulardan biri.

🔥 LeetCode 917. Reverse Only Letters: https://leetcode.com/problems/reverse-only-letters/

➡️ Problem açıklaması:

Given a string S, return the “reversed” string where all characters that are not a letter stay in the same place, and all letters reverse their positions.

Example 1:

Input: “ab-cd”

Output: “dc-ba”

Example 2:

Input: “a-bC-dEf-ghIj”

Output: “j-Ih-gfE-dCba”

Example 3:

Input: “Test1ng-Leet=code-Q!”

Output: “Qedo1ct-eeLg=ntse-T!”

Note: S.length LessOrSmaller= 100

33 LessOrSmaller= S[i].ASCIIcode LessOrSmaller= 122

S doesn’t contain \ or “