C Sharp sözdizimi

**C# sözdizimi**, kodların nasıl yazılacağını ve yorumlanması gerektiğini tanımlayan kurallar kümesidir. Bu kurallar, C# programlarının derleyici tarafından doğru bir şekilde okunup çalıştırılmasını sağlar. C# sözdizimi, diğer programlama dillerinkine benzer şekilde değişkenlerin tanımlanmasından, döngülerin ve koşullu ifadelerin yazılmasına kadar, programın yapısını ve işleyişini belirleyen temel unsurları içerir.

## Temel Bilgiler (Basics)
### Tanımlayıcı (Identifier)
C# sözdiziminde bir metoda, değişkene veya kullanıcı tarafından tanımlanan herhangi başka bir öğeye atanan isme tanımlayıcı (Identifier) denir.

Değişkenler,
* "_" ile
* Büyük ve küçük harf ile başlayabilir.
* Bir karakterden birkaç karaktere değişen uzunluklarda olabilir
* Türkçe karakterler kullanılabilir.

Fakat;
* Bir numerik karakter ile başlayamaz.
* Anahtar kelime (keyword) hariç, sembol ile başlayamaz. [*[[#Anahtar Kelimeler (Keywords)|Anahtar kelimeler (keywords)]]]*
* 511 karakterden fazla karaktere sahip olamaz.

#### Anahtar kelimeler (Keywords)

Bağlamsal anahtar kelime, kodda belirli bir anlam sağlamak için kullanılan ancak C# dilinde rezerve edilmiş bir sözcük olmayan kelimedir. Bazı bağlamsal anahtar kelimeler, örneğin *partial* ve *where*, birden fazla bağlamda özel anlamlara sahiptir. Aşağıdaki C# anahtar kelimeleri bağlamsaldır:

Anahtar kelimeler, değişken isimlendirirken kullanılamayan ayrılmış sözcüklerdir. Ancak, kullanılmak istenilen kelimenin önüne @ (kuyruklu a) koyarak, tanımlayıcı hâle getirilebilir.


```csharp
string @out; //Şimdi olağan tanımlayıcı kelime olarak kullanılabilir.
```


Not: out günümüzde hala kullanılabilen bir anahtar kelimedir.

### Değişkenler (Variables)
Değişkenler, değerlerle ilişkilendirilmiş tanımlayıcılardır. Değişkenin türü ve adı yazılarak bildirilirler ve isteğe bağlı olarak aynı satır içinde ilk değerleri atanabilir.

**Tanımlama (Declare)**

```csharp
int degiskenim; // 'int' türünde 'degiskenim' adında başlangıç değeri atanmamış bir değişken tanımlama
```


**Atama (Initialize)**

Bir değişkene istenilen bir değer tanımlayabilmektir.

```csharp
int degiskenim; // Atama yapılmamış bir değişken bildirme
degiskenim = 35; // Değişkene bir değer atama
```


**Bildirim ve Atama (Declare & Initialize)**

```csharp
int degiskenim = 35; // Aynı zamanda değişkenin bildirimi ve atanması
```


**Büyük ve küçük harfe duyarlıdır**
Değişkenler, aynı isme sahip olsalar dahi büyük ve küçük harf farkı olduğunda farklı değişkenler olarak değerlendirilir ve farklı değerler tutabilirler.

```csharp
string book = "Suç ve Ceza";
 string Book = "Savaş ve Barış";
```


### Veri Türleri (Data Types)
C# statik olarak tür denetimi yapılan bir dildir, yani her değişkenin bir türü olmalıdır.

#### Temel Veri Türleri


```c#
int age = 25;
float pi = 3.14f;
string name = "John";
bool isAlive = true;
Console.WriteLine($"Name: {name}, Age: {age}, IsAlive: {isAlive}");
```


### Operatörler (Operators)

#### Aritmetik Operatörler

* Toplama (`+`), Çıkarma (`-`), Çarpma (`*`), Bölme (`/`), Modül (`%`).

#### Atama Operatörleri

* `=` ile değer atanır.
* Kısayollar: `+=`, `-=`, `*=`, `/=`, `%=`.

#### Karşılaştırma Operatörleri

* `==`, `!=`, `<`, `>`, `<=`, `>=`.

#### Mantıksal Operatörler

* VE (`&&`), VEYA (`||`), DEĞİL (`!`).

### Koşul İfadeleri (Conditional Expressions)
C# programlarında koşullar, programın akışını kontrol eder.

#### <code>if-else:</code>

```c#
int number = 10;

if (number > 0)
{
    Console.WriteLine("Pozitif");
}
else
{
    Console.WriteLine("Negatif veya Sıfır");
}
```


#### <code>switch</code>

```c#
string day = "Monday";

switch (day)
{
    case "Monday":
        Console.WriteLine("Pazartesi");
        break;
    case "Friday":
        Console.WriteLine("Cuma");
        break;
    default:
        Console.WriteLine("Diğer gün");
        break;
}
```


### Döngüler (Cycles)

#### <code>for</code> Döngüsü

```c#
for (int i = 0; i < 5; i++)
{
    Console.WriteLine($"Sayı: {i}");
}
```


#### <code>while</code> Döngüsü

```c#
int counter = 0;
while (counter < 5)
{
    Console.WriteLine($"Counter: {counter}");
    counter++;
}
```


#### <code>foreach</code> Döngüsü

```c#
string[] fruits = { "Elma", "Armut", "Muz" };

foreach (string fruit in fruits)
{
    Console.WriteLine(fruit);
}
```


### Metotlar (Methods)
Metotlar, tekrar eden kodların modüler hale getirilmesini sağlar.

#### Tanımlama

```c#
class Program
{
    static void Greet(string name)
    {
        Console.WriteLine($"Merhaba, {name}!");
    }

    static void Main(string[] args)
    {
        Greet("Ali");
    }
}
```


#### Geri Dönen Metot

```c#
static int Add(int a, int b)
{
    return a + b;
}
```


### Sınıflar ve Nesneler (Classes and Objects)
C# nesne yönelimli bir dildir. Sınıflar, bir nesne için planlar veya şablonlardır.

#### Sınıf Tanımlama

```c#
class Car
{
    public string Brand { get; set; }
    public int Year { get; set; }

    public void DisplayInfo()
    {
        Console.WriteLine($"Marka: {Brand}, Yıl: {Year}");
    }
}
```


#### Nesne Kullanımı

```c#
Car myCar = new Car();
myCar.Brand = "Toyota";
myCar.Year = 2020;
myCar.DisplayInfo();
```


### Hata Yönetimi (Error Management)
Hatalar, `try-catch` blokları ile yönetilir.
```c#
try
{
    int x = int.Parse("abc");
}
catch (FormatException ex)
{
    Console.WriteLine($"Hata: {ex.Message}");
}
finally
{
    Console.WriteLine("Her zaman çalışır.");
}
```


## Kaynakça