Altbilgi içeriğine atla
Iron Academy Logo
C# öğrenin
C# öğrenin

Diğer Kategoriler

C# Bayraklarını Anlama

[[academy-video-youtube({"vid": "wiqJW64I1Rc", "start_time": "0", "title": "C#'da İkili: 10 Dakikadan Kısa Sürede Bayraklar", "creator": "Tim Corey", "length": "8m 32s"})]]

C# Bayrakları, geliştiricilerin izinleri ve seçenekleri bitwise işlemlerle yönetmesini sağlayan güçlü ama genellikle göz ardı edilen bir özelliktir. Binary in C#: Flags in 10 minutes or less" adlı videosunda Tim Corey, bayrakların nasıl çalıştığını ve C#'ta nasıl etkili bir şekilde kullanılabileceklerini net ve öz bir şekilde açıklar. Bu makalede, Tim'in videodaki açıklamalarını ve içgörülerini analiz ederek C# Bayrakları hakkında daha iyi bir anlayış kazanacağız.

Bayraklar Nedir?

Tim, Bayraklar kavramını tanıtarak başlar. Bayrakların, bir değişkende birden fazla değeri atamamıza izin verdiğini ve onların bir uygulamada izinleri yönetmek için yararlı olduğunu açıklar. Bunu açıklamak için, Tim SQL, WebServer, Redis, Azure, GitHub ve BuildSystem gibi çeşitli izinleri içeren SystemPermissions adında bir enum oluşturur.

Tim, Flags olmadan, tek bir değişkenin aynı anda yalnızca bir izin tutabileceğini vurgular. Örneğin, bir kullanıcıya SystemPermissions.GitHub atamaya çalışırsak, bir dizi kullanmadığımız sürece SystemPermissions.BuildSystem de atayamayız, bu da yönetimi zahmetli hale getirir.

Bayrak Olmadan Sorun

Bu noktada, Tim geleneksel enum atamalarının sınırlamalarını gösterir. İzinleri bir kerede atarsak, daha sonra kontrol etmek bir diziyi dolaşmayı gerektirir, bu verimsizdir ve ölçeklenemez. Bu, Tim'in tanımladığı gibi, birden çok izin yönetmenin bir sıkıntı haline geldiği "çirkin" bir uygulamaya yol açar.

Bayraklar Özelliği Tanıtmak

Bu sorunu çözmek için, Tim bir enumun bit alanı olarak ele alınmasına olanak tanıyan [Flags] özniteliğini tanıtır. Her izne, bitwise kaydırma kullanarak benzersiz bir ikili değer atandığını açıklar.

Artan numaraları (0, 1, 2, 3, vb.) atamak yerine, Tim iki'nin eşitler marasıgın değerlerine atar:

[Flags]
enum SystemPermissions
{
    None = 0,
    SQL = 1 << 0,       // 00000001
    WebServer = 1 << 1, // 00000010
    Redis = 1 << 2,     // 00000100
    Azure = 1 << 3,     // 00001000
    GitHub = 1 << 4,    // 00010000
    BuildSystem = 1 << 5 // 00100000
}
[Flags]
enum SystemPermissions
{
    None = 0,
    SQL = 1 << 0,       // 00000001
    WebServer = 1 << 1, // 00000010
    Redis = 1 << 2,     // 00000100
    Azure = 1 << 3,     // 00001000
    GitHub = 1 << 4,    // 00010000
    BuildSystem = 1 << 5 // 00100000
}

Tim, bitlerin kaydırılmasının, her iznin çakışma olmadan benzersiz bir değere sahip olmasını sağlarken, birden çok iznin verimli bir şekilde birleştirilmesine izin verdiğini açıklar.

Bayrakları Atama ve Birleştirme

Tim, ardından, bayrakları atama ve birleştirme işlemlerini bitwise işlemlerle nasıl yapılacağını gösterir. Bir kullanıcıya birden fazla izin atamak için bitimlik OR (`|) operatörü:

SystemPermissions timsPermissions = SystemPermissions.SQL | SystemPermissions.Redis | SystemPermissions.GitHub;
SystemPermissions timsPermissions = SystemPermissions.SQL | SystemPermissions.Redis | SystemPermissions.GitHub;

Bu, SQL, Redis ve GitHub izinlerini timsPermissions'a atar ve bit işlemleri kullanarak bunları tek bir değişkende depolar.

Bayraklarla İzinleri Kontrol Etmek

Flags'ın ana avantajlarından biri, belirli bir iznin ayarlanıp ayarlanmadığını bitwise AND (&) operatörünü kullanarak kontrol etme yeteneğidir. Tim, bir kullanıcının belirli bir izne sahip olup olmadığını nasıl doğrulayacağınızı gösteriyor:

if ((timsPermissions & SystemPermissions.SQL) == SystemPermissions.SQL)
{
    Console.WriteLine("Tim has SQL access.");
}
if ((timsPermissions & SystemPermissions.SQL) == SystemPermissions.SQL)
{
    Console.WriteLine("Tim has SQL access.");
}

Tim, bunun dizi üzerinden döngü oluşturmaktan çok daha verimli bir yaklaşım olduğunu vurguluyor, çünkü hızlı bit düzeyinde karşılaştırmalara olanak tanır.

İzinleri Kaldırma

Tim ayrıca bir izni bitwise AND ve NOT (~) operatörünü kullanarak nasıl kaldırılacağını da kapsar. SQL iznini timsPermissions'tan kaldırmamız gerekirse, bunu şu şekilde yaparız:

timsPermissions &= ~SystemPermissions.SQL;
timsPermissions &= ~SystemPermissions.SQL;

Bu, diğer izinleri korurken SQL iznini etkili bir şekilde kaldırır.

Bayrakları İkili Sistem Olarak Görüntüleme

Bayrakların nasıl çalıştığını görselleştirmek için Tim, enum değerini ikili reprezentasyonuna dönüştürmeyi öneriyor. Bir iznin ikili değerini göstermek için bir yardımcı yöntem kullanır:

Console.WriteLine(Convert.ToString((int)timsPermissions, 2));
Console.WriteLine(Convert.ToString((int)timsPermissions, 2));

Tim, bunun enum içindeki bireysel bitlerin nasıl ayarlandığını ve manipüle edildiğini anlamaya yardımcı olduğunu açıklar.

Neden Bayrakları Kullanmalısınız?

Tim, C# dilinde Neden Bayrakların (Flags) Kullanışlı Olduğunu Vurgulayarak Sonuçlandırıyor:

Bir değişkende birden fazla değeri depolamaya izin verirler. Verimli izin yönetimini sağlarlar.

  • Bit işlemleri kullanarak izinleri kontrol etmeyi ve değiştirmeyi basitleştirirler.

Bayrakların dosya izinleri, kullanıcı rolleri ve uygulama ayarları gibi senaryolarda yaygın olarak kullanıldığını da belirtir.

Son Düşünceler

Video boyunca, Tim Corey C# Flags'in nasıl çalıştığını açık ve pratik bir şekilde gösteriyor. [Flags] özniteliği ve bit işlemlerini kullanarak, karmaşık veri yapıları gerekmeden birden fazla izni etkili bir şekilde yönetebiliriz. Birden fazla değer gerektiren izinler veya ayarlarla çalışıyorsanız, Flags, uygulamanızı basitleştirmek için mükemmel bir araçtır.

Pratik bir anlayış için, Tim Corey'nin bu videosuna göz atın, burada bu kavramları adım adım açıklıyor. Bayraklar ilk başta karmaşık görünebilir, ancak ikili doğalarını anladıktan sonra C# geliştirmede inanılmaz derecede kullanışlı bir özellik haline gelirler.

Hero Worlddot related to C# Bayraklarını Anlama
Hero Affiliate related to C# Bayraklarını Anlama

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara