Professional Documents
Culture Documents
C# Program Yapısı
1 2
öğrenme çıktıları
3 4
Collection Sınıfı
3 Listeleme için kullanılacak veri türlerini String Sınıfı
öğrenebilme ve farklarını açıklayabilme 4 String sınıfının özelliklerini kullanabilme
Anahtar Sözcükler: • Metot • Özyinelemeli Metotlar • Metot Aşırı Yükleme • Math • Matematik Sınıfı
• Collection • Dizi Yapıları • String Sınıfı
82
4
İleri Programlama I
83
4
C# Program Yapısı
Metot Çağırma
Hazırlanan metotlar, Main() metodu içinden ya da başka metotlardan çağrılabilir. Metotları çağırırken
erişim belirleyicileri, varsa aldıkları parametreler ve bunların türlerine uygun bir şekilde çağrılmalı ve belir-
tilmiş ise geri dönüş tiplerine uygun bir şekilde de değişkenlere atama yapılmalıdır.
Bir metot, Main metodu içinden direk çağrılmak isteniyorsa, static bir metod içinden yine bir static
metot çağrılabilir kuralı gereğince metodun static olması gerekmektedir. Bunun yanında, parametre alma-
yan ve bir değer döndürmeyen metotlar da tanımlanabilmektedir.
Bu örneğimizde, static Main metodu içinden yine static ve bir değer döndürmeyen “ekranaYaz” me-
todunu çağırdık.
84
4
İleri Programlama I
Bu örnekte, dönüş değeri olmayan ama parametre alan static bir metot çağrısı yapıldı. Dikkat edilirse,
metodun aldığı ve gönderdiğimiz parametreler aynı türden tanımlanmıştır. Programın çıktısı da şu şekilde
olacaktır:
return alan ;
}
Console.WriteLine( alan );
}
Bu örnekte ise parametre alan ve aynı zamanda “double” türünde değer döndüren bir metodu çağırdık.
Ekran çıktısı ise şu şekilde olacaktır:
85
4
C# Program Yapısı
Özyinelemeli fonksiyonları daha iyi kavrayabilmek için faktöriyel hesaplama fonksiyonumuzu adım
adım işleyelim. 6 sayısı için bu metodu çağırdığımızı düşünerek tabloyu dolduralım. fh kısaltması “fakto-
riyelHesapla” metodu için kullanılmıştır. Kodumuzda, özyinelemeli fonksiyonumuz 0 ile çağrılana kadar
kendisini çağırmaya devam edecektir. Ne zaman parametre olarak 0 gelirse, sonuç olarak 1 döndürür. En
son 1 değeri döndüğünde, bu metodu içeriden çağıran değerler, return ile bir önceki metot çağırımını
tamamlayacaklar ve en son sonuç olarak da 720 değeri bulunacaktır.
Tabloya göre biraz hesaplama yapmamız gerekecek. İlk tanımlı değerimiz fh(0)=1 olduğunu görüyo-
ruz. Bu değerden hareketle, ilk adıma kadar fonksiyonlar hesaplanan değerleri döndürerek istenen fh(6)
değerimizi elde etmemizi sağlayacaktır. Sonucun hesaplandığı tabloda ise işlemlerin sonuçları, sondan başa
doğru metodun döndürdüğü değerler yazılarak hesaplanmıştır.
86
4
İleri Programlama I
Örneğimizde aynı sonucu döndüren fakat farklı parametreler alan üç farklı metot görüyoruz. Metotları
aşırı yüklerken dikkat etmemiz gereken iki nokta vardır.
• Metotların dönüş tiplerinin aynı olması
• Metotların farklı tipte parametre alması
Öğrenme Çıktısı
1 Metot oluşturabilme ve program içinde metot çağırabilme
MATEMATİK SINIFI
C# dilinde, matematiksel işlemlerin daha kolay yapılabilmesi amacıyla, bazı işlemler “System.Math”
sınıfı içinde toplanmıştır. Bir sayının karesini alma, karekökünü bulma, n’inci dereceden kuvvetini alma,
alt ve üste yuvarlama, Sin/Cos.. gibi trigonometrik işlemler, logaritmik işlemler, sayı karşılaştırma gibi
işlemleri desteklemektedir.
Ayrıca sıklıkla kullanılan Pi sayısı ve Euler değeri de bu sınıf içerisinde birer sabit olarak tanımlanmıştır.
Şeklinde birer sabit olarak tanımlanmışlardır. Kullanımını da bir örnek ile gösterelim.
87
4
C# Program Yapısı
Değer: 123.45
Math.Min( sayı1, sayı2 ), Math.Max( sayı1, sayı2 ): İki sayı arasında karşılaştırma yapmak için kulla-
nılır. Min ile küçük sayı, Max ile de büyük sayı eşitlikteki değişkene atanır. Karşılaştırmak için de herhangi
bir sayısal değer alabilirler.
int x = 7, y = 12 ;
int buyuk = Math.Max( x, y ) ;
Math.Sign( sayı ): Parametre olarak girilen “unsigned” olmayan herhangi bir sayının işaretini bulmak
için kullanılır. Pozitif sayılar için +1, negatif için -1 ve sıfır için 0 olarak bir int değer döndürür.
Math.BigMul( sayı1, sayı2 ): Parametre olarak iki tane int türünde sayı almaktadır. Bu iki sayının çar-
pımlarının sonucunu, kendi türlerinden daha fazla veri alabilen “long” türünde döndürmektedir. Çünkü
aynı türdeki değişkenlerin çarpımının sonucu, yüksek olasılıkla kendi türlerinin desteklediği sayı limitle-
rini geçecektir.
88
4
İleri Programlama I
Math.DivRem( bölünen, bölen, out kalan ): % operatörü ile kalan hesaplanabilirken bu fonksiyon
ile iki tam sayının bölüm sonucu ve kalanı hesaplanabilmektedir. Dönen sonuç ve parametreleri int veya
long türünde olabilir.
76 / 8 = 9 kalan: 4
Math.Floor( sayı ): Yuvarlama fonksiyonlarındandır. Sayıyı aşağı doğru yuvarlamak için kullanılır.
Parametre olarak aldığı sayı double, decimal veya bunlara dönüştürülebilir olmalıdır.
double sayi ;
sayi = Math.Floor( 4.7 ) ; // sonuç: 4
sayi = Math.Floor( 7.3) ; // sonuç: 7
sayi = Math.Floor( -9.3 ) ; // sonuç: 10
sayi = Math.Floor( -6.8 ) ; // sonuç: 7
Math.Ceiling( sayı ): Yuvarlama fonksiyonlarındandır. Sayıyı yukarı doğru yuvarlamak için kullanılır.
Parametre olarak aldığı sayı double, decimal veya bunlara dönüştürülebilir olmalıdır.
double sayi ;
sayi = Math.Ceiling( 4.7 ) ; // sonuç: 5
sayi = Math.Ceiling( 7.3) ; // sonuç: 8
sayi = Math.Ceiling( -9.3 ) ; // sonuç: 9
sayi = Math.Ceiling( -6.8 ) ; // sonuç: 6
Math.Round( sayı ): Yuvarlama fonksiyonlarındandır. Sayıyı en yakın tam sayıya çevirmek için kulla-
nılır. Parametre olarak aldığı sayı double, decimal veya bunlara dönüştürülebilir olmalıdır.
double sayi ;
sayi = Math.Round( 4.7 ) ; // sonuç: 5
sayi = Math.Round( 7.3) ; // sonuç: 7
sayi = Math.Round( -9.3 ) ; // sonuç: 9
sayi = Math.Round( -6.8 ) ; // sonuç: 7
double sayi ;
sayi = Math.Round( 4.745, 2 ) ; // sonuç: 4.75
sayi = Math.Round( 7.356, 2 ) ; // sonuç: 7.36
sayi = Math.Round( -9.365, 2 ) ; // sonuç: 9.37
sayi = Math.Round( -6.812, 2 ) ; // sonuç: 6.81
89
4
C# Program Yapısı
Math.Truncate( sayı ): Sayının tam kısmını döndürür, ondalıklı kısmını siler. Parametre olarak aldığı
sayı double, decimal veya float gibi ondalıklı sayılar olabilir.
Sonuç: 456
Math.Log10( sayı ): Parametre olarak alınan sayının 10 tabanına göre logaritmasını hesaplamaktadır.
Sayı, double veya double türüne dönüştürülebilir olmalıdır.
x = log10 1000
double x = Math.Log10( 1000 ); // işlem sonucu 3
Math.Log( sayı ): Taban değeri belirtilmediği için, sonuç sayı değerinin “e” tabanındaki logaritması
olacaktır. Sayı, double veya double türüne dönüştürülebilir olmalıdır.
x = loge 1000 ;
double x = Math.Log( 1000 ) ; // işlem sonucu 6.90775527898214
Math.Log( sayı, taban ): Parametre olarak verilen sayıyı, istenilen tabandaki algoritması hesaplanarak
sonuç elde edilir. Sayı ve taban, double veya double türüne dönüştürülebilir olmalıdır.
x = log2 1000 ;
double x = Math.Log( 1000, 2 ) ; // işlem sonucu 9.96578428466209
Math.Pow( sayı, üs ): Parametre olarak verilen sayının belirtilen kuvvetini hesaplamak için kullanılır.
Sayı ve üs, double veya double türüne dönüştürülebilir olmalıdır.
x = 72 y=ab
Math.Sqrt( sayı ): Parametre olarak alınan sayının karekökünü hesaplayan fonksiyondur. Sayı, double
veya double türüne dönüştürülebilir olmalıdır.
x = 121
double x = Math.Sqrt( 121 ) ; // sonuç 11 olacaktır
Math.Exp( üs ): Parametre olarak verilen “üs” değerine göre “e” sayısının kuvvetini hesaplar. Üs, doub-
le veya double türüne dönüştürülebilir olmalıdır.
x = e5
double x = Math.Exp( 5 ) ; // sonuç 148.413159102577
90
4
İleri Programlama I
Math.Sin( açı ), Math.Cos( açı ), Math.Tan( açı ): Parametre olarak verilen “açı” değerinin Sinus,
Cosinus ve Tanjant değerlerini hesaplayan fonksiyondur. Açı, double veya double türüne dönüştürülebilir
ve radyan cinsinden olmalıdır.
Örneğin, 60 derecelik açı, pi cinsinden p * ( 60 / 180 ) şeklinde yazılmalıdır.
sin(60) => x = sin(p/3), cos(60) => x = cos(p/3), tan(60) => x = tan(p/3)
Math.Sinh( açı ), Math.Cosh( açı ), Math.Tanh( açı ): Parametre olarak verilen açıların hiperbolik
sinus, cosinus ve tanjant değerlerini hesaplanmasında kullanılır. Hesaplanan açı radyan cinsinden oldu-
ğundan, açıya dönüştürmek için 180 ile çarpılması gerekmektedir. Açı, double veya double türüne dönüş-
türülebilir ve radyan cinsinden olmalıdır.
Örneğin; 60 derecelik açı, pi cinsinden p * ( 60 / 180 ) şeklinde yazılmalıdır.
sinh(60) => x = sinh(p/3), cosh(60) => x = cosh(p/3), tanh(60) => x = tanh(p/3)
Random Sınıfı
C# programlama dilinde program geliştirirken kimi zaman rastgele değerlere ihtiyaç duyabiliriz. Bu
ihtiyaca yönelik Random sınıfı geliştirilmiştir. Random sınıfı, sistem zamanına (tarih-saat) göre rastgele
bir değer oluşturur. Kullanabilmek için bu sınıftan yeni bir nesne oluşturulması gerekmektedir. Bir örnek
ile inceleyelim.
91
4
C# Program Yapısı
Rastgele üretilen sayılardan ilki, sayi1 için, 9 ile 26 arasında 9’un dahil olduğu ama 26’nın dahil olma-
dığı int türünde bir sayı üretilir. sayi2 değişkenine ise 0 ile 66 arasında, yine 0’ın dahil olup 66’nın dahil
olmadığı int türünde bir sayı üretilir. Üçüncü örnekte ise int türünden pozitif bir sayı üretilir. Son örnekte
ise double türünde 0.0 ile 1 arasında rastgele bir değer üretilir.
Öğrenme Çıktısı
2 Matematiksel işlemleri programlama dilini karşılıkları ile ilişkilendirebilme
COLLECTION SINIFI
C# programlama dilinde koleksiyonlar, nesneleri gruplamayı sağlayan sınıflardır. Klasik dizi (array)
yapısından çok daha fazla özelliği olan, System.Collections altında tanımlı bir veri türüdür. IEnumerable
arayüzü koleksiyon sınıflarının tümüne uygulanmıştır. Böylece tüm koleksiyon nesneleri foreach döngüsü
ile kullanılabilir.
Koleksiyonlar, nesnelerden oluşmuş, çok sayıda verinin tutulduğu türlerdir. Diziler ile arasındaki fark
ise diziler sabit boyutlara sahip iken, koleksiyon yapılarının boyutları dinamik olarak artmaya ve azalmaya
imkân sunar. Bunun yanında koleksiyondaki elemanları numaralamak, sıralamak, yeni eleman eklemek,
eleman çıkartmak, koleksiyonda eleman aramak gibi özellikleri destekleyen bir yapıdır. Farklı durumlar
için oluşturulmuş çeşitli koleksiyon yapıları mevcuttur. Ayrıca kullanıcıların da kendi koleksiyonlarını
oluşturmalarına izin vermektedir. Koleksiyon türlerin bazılarından kısaca bahsedeceğiz.
• ArrayList: En genel amaçlı kullanılan koleksiyon türüdür. Nesnelerden oluşan dizi yapısıdır. Add()
metodu ile ArrayList’e yeni eleman eklenir. Aynı eleman birden fazla eklenebilir. Elemanları sıralı
değildir. 0’dan başlayan bir sayaç ile elemanlarına ulaşılabilir. RemoveAt( sayaç ) ile istenilen sırada-
ki eleman listeden çıkarılabilir.
ArrayList kullanımını bir örnek ile inceleyelim.
92
4
İleri Programlama I
using System;
using System.Collections;
public class Koleksiyonlar
{
public static ArrayList DiziOlustur( int elemanSayisi )
{
ArrayList al = new ArrayList() ;
for( int i = 0; i < elemanSayisi; i++ )
{
// diziye, parametreden gelen sayı kadar,
// bir formül ile oluşturduğumuz değerleri atıyoruz
al.Add( i * 3 + 5 ) ;
}
return al;
}
5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 62
• Hashtable: Array ve ArrayList sınıflarından tanımlanmış dizi elemanlarına bir indeks numarası
ile erişebiliriz. Ancak kod yazımında bu her zaman en verimli yöntem olmayabilir. Çünkü hangi
nesnenin hangi sırada listeye eklendiğini bilmemiz gerekir. Hashtable sınıfı da tam bu eksikliği
gidermek üzere tasarlanmıştır. Bu koleksiyon türünde, listeye ekleyeceğimiz her bir eleman için
indeks kullanmak yerine, bir anahtar ve buna karşılık değer ataması yapılmaktadır.
93
4
C# Program Yapısı
using System;
using System.Collections;
Örnek kodda kullanılan bir özellikten daha bahsetmek gerekiyor. ICollection sınıfından türetilen
“anahtarlar” ve “degerler” değişkenlerine Hashtable’daki elemanların anahtar ve bunlara karşılık gelen de-
ğerleri dizi şeklinde bu değişkenlere atanıyor. Programın çıktısı ise şu şekilde görünecektir.
26 20 34 06 16 35
Eskişehir Denizli İstanbul Ankara Bursa İzmir
34 plakalı şehir: İstanbul
• Queue: Sözlük anlamı olarak sıra, kuyruk manası vardır. Programlamada da yine anlamı ve gerçek
hayattaki kullanımı ile ilişkili bir yapıyı göstermektedir. FIFO (First In First Out) yani ilk giren ilk
çıkar yapısını sergilemektedir. Bunu yemekhane kuyruğu gibi düşünebiliriz, kuyruğa ilk giren ilk
çıkacaktır. Queue’nun önünden bir eleman çekmek için Dequeue(), sonuna bir eleman eklemek
için de Enqueue() metodu kullanılmaktadır.
94
4
İleri Programlama I
using System;
using System.Collections;
Örnek kodumuzda kuyrukListesi isimli Queue listemize sırayla araba markalarını ekledik. Daha sonra
listemizden sırayla eklediğimiz elemanları çektik. Sonuçta, listeye ilk eklenen değeri, kuyruğun önünden
ilk çekilen değer olarak görmekteyiz.
Fiat
Volkswagen
Peugeot
Ford
Opel
BMW
Mercedes
• Stack: Sözlük anlamı olarak yığın, istif gibi anlamlara gelmektedir. Tıpkı Queue gibi gerçek ha-
yattaki kullanımı programa aktarılmıştır. LIFO (Last In First Out) yani son giren ilk çıkar yapısını
sergilemektedir. Bu yığına yine yemekhane ile ilgili tabldotların ya da tepsilerin üst üste koyul-
maları örnek verilebilir. İlk konulan tepsi, mecburen en son alınacaktır. Son konulan ise ilk önce
alınacaktır. Yığının en üstüne bir eleman eklemek için Push() metodu, üstten bir eleman çekmek
için de Pop() metodu kullanılır. Bir örnek ile inceleyelim.
95
4
C# Program Yapısı
using System;
using System.Collections;
Stack değişkenimize sırayla en sondan en başa doğru eğitim seviyelerini ekledik. Daha sonra sırayla ele-
manları çektiğimizde en son ekleneni ilk olarak karşımızda gördük. Programın çalıştırılmasında şu şekilde
bir sonuç elde ettik.
İlkokul
Ortaokul
Lise
Önlisans
Lisans
Yüksek Lisans
Doktora
96
4
İleri Programlama I
using System;
using System.Collections.Generic;
Örneğimizde, anahtarı int türünde ve değeri string türünde bir dictionary nesnesi oluşturduk. Sırasıyla
indeksimize string değerleri atadık. En son olarak da atadığımız değerleri anahtar değerleri ile birlikte yaz-
dırdık. Programın çalışması sonucu da şu şekilde olacaktır:
Öğrenme Çıktısı
3 Listeleme için kullanılacak veri türlerini öğrenebilme ve farklarını açıklayabilme
Queue (Kuyruk) yapısı için Hash table ile bir yabancı Liste yapılarında <T> gene-
program yazarken kullanıla- dil için kullanılan sözlük rics kullanılmasının fayda-
bilecek bir durumu açıklayın. yapılarını ilişkilendirin. larını anlatın.
97
4
C# Program Yapısı
STRING SINIFI
System.String sınıfını temsil etmektedir. String, günlük hayattaki metinleri, bilgisayar ortamında ise
art arda gelen karakter dizilerini simgeler. String veri türü her ne kadar değer tipi kabul edilse de referans
tipinde bir veri türüdür.
şeklinde kullanılır. String sınıfının çeşitli metotları vardır, bunlardan en sık kullanılanları kısaca inceleyelim.
• Length: Metnin uzunluğunu yani kaç karakterden oluştuğu bilgisini vermektedir. int türünde de-
ğer döndürür.
şeklinde kullanılır.
• ToLower: String türünde tanımlanmış değişkendeki metnin tümünü küçük harfe çevirir.
• ToUpper: String türünde tanımlanmış değişkendeki metnin tümünü büyük harfe çevirir.
• Compare: Metin karşılaştırma işlemi yapmak için kullanılır. String ifadeleri karakter karakter kar-
şılaştırarak sonucu int bir değer olarak döndürür.
- -1 sonucu, ilk metnin karşılaştırılan karakteri, ikinci metinden küçüktür (metin1 < metin2)
- 0 sonucu, iki metin de tamamen eşittir (metin1 = metin2)
- 1 sonucu, ilk metnin karşılaştırılan karakteri, ikinci metinden büyüktür (metin1 > metin2)
Büyük-küçük harf duyarlılığı “true” olduğu zaman, büyük-küçük harfe duyarsız olacaktır. ADANA ve
Adana eşit kabul edilecektir.
Tam tersi “false” olduğu zaman da büyük-küçük harfe duyarlı olduğu kabul edilecektir. ADANA ve
Adana eşit değil kabul edilecektir.
• Concat: Bu metot, string ifadeleri birleştirmek için kullanılır. Verilen metinleri art arda ekler ve
yine string türünden bir değer döndürmektedir.
string tumMetin = String.Concat( Parametre Listesi );
98
4
İleri Programlama I
using System;
using System.Collections.Generic;
string m2 = "Öğreniyorum!";
Programın sonucu:
C# Öğreniyorum!123.456|26
• Format: Verilen string bir ifadeyi istenilen formata uygun şekilde düzenleyerek yine geriye string bir
değer döndürür.
• IsNullOrEmpty: Parametre olarak verilen string değişkenin boş olup olmadığını kontrol etmek için
kullanılır. Sonucu boolean olarak döndürmektedir.
99
4
C# Program Yapısı
using System;
if(sonuc1 == true)
Console.WriteLine("Metin1 isimli değişkenin içi boş");
else
if(sonuc2 == true)
Console.WriteLine("Metin2 isimli değişkenin içi boş");
else
• Contains: Bu metot, bir string değer içinde karakter ya da metin aramak için kullanılmaktadır. Boo-
lean bir değer döndürür. True ise aranan metin, string değerin içinde vardır, false ise bulunamamıştır.
using System;
100
4
İleri Programlama I
Metnin içerisinde aranan “Üni” sözcüğü olduğu için sonuç True dönecektir. Dikkat edilmesi gereken
bir durum da aranan metnin büyük-küçük harf duyarlılığı olduğudur. “üni” kelimesini arattığımızda so-
nuç False dönecektir.
• CopyTo: Bu metot ile, string bir değişken içinden belirtilen konumdan bir char dizisine kopyala-
ma yapar. String değişkenin başlangıç indeksi seçilir, char dizisinin kopyalama yapılacağı başlangıç
indeksi ve kopyalanacak karakter sayısı verilerek kopyalama yapılır. Kullanımı da şu şekildedir:
• EndsWith: String bir değişkenin sonunun verilen bir char veya string türündeki değere eşit olup
olmadığını kontrol eder. Kullanımı şu şekildedir:
• IndexOf: String bir değişken veya değer içinde karakter ya da string bir ifadeyi aramak için kullanı-
lır. Aranan değer bulunur ise ilk bulduğu metnin indeks değerini döndürür. Bulamazsa -1 döndü-
rür. 4 farklı kullanım şekli vardır.
- IndexOf(Char)
- IndexOf(String)
- IndexOf(Char degisken_ismi, int başlangıç_konumu)
- IndexOf(String degisken_ismi, int başlangıç_konumu)
using System;
string aranan="kol" ;
Örnek programımızın sonucu “kol” metninin ilk geçtiği konum olan “16” olarak bulunacaktır. Dikkat
edelim, C# dilinde dizilerin ilk elemanlarının konumu 0’dan başlamaktadır.
• Insert: Verilen string bir değer içerisine, belirtilen başlangıç pozisyonundan itibaren araya yeni
metin ilave edilir. Geriye metnin ilave edilmiş hâlini döndürür. Kullanımı şu şekildedir:
101
4
C# Program Yapısı
using System;
- PadLeft(int bosluk_sayisi, char karakter): Metnin sol başına parametrede verilen sayı kadar
belirtilen karakteri ekler. Kullanımı şu şekildedir:
- PadRight(int bosluk_sayisi, char karakter): Metnin sağına parametrede verilen sayı kadar belir-
tilen karakteri ekler. Kullanımı şu şekildedir:
102
4
İleri Programlama I
• Replace: Verilen metin içerisindeki bir metin arar ve bunu yeni metin ile değiştirir. İki farklı kulla-
nımı vardır.
- string degistirilmis_metin = eski_metin.Replace( char eski_karakter, char yeni_karakter )
- string degistirilmis_metin = eski_metin.Replace( string eski_kelime, string yeni_kelime )
• Split: String bir değişkenin değerini belirtilen koşullara göre parçalara ayırmaya yarar. İçerisinde
nokta “.” geçen bir paragraf metnini, cümlelerden oluşan bir string dizisine çevirebilir. Kullanımı
şu şekildedir:
• StartsWith: Bir metnin verilen bir karakter ya da bir metin ile başlayıp başlamadığını kontrol et-
mektedir. Boolean bir değer döndürür. True ise verilen metin ile başlamış, False ise verilen metin ile
başlamamıştır. Kullanımı şu şekildedir:
• Substring: Bir metnin içinden istenilen yerden, istenildiği kadar metin almak için kullanılır. İki
farklı kullanımı vardır.
- Substring( int başlangıç_konumu ): Verilen başlangıç konumundan metnin sonuna kadar ala-
rak bir metin oluşturur. Kullanımı şu şekildedir:
- Substring( int başlangıç_konumu, int adet ): Verilen başlangıç konumundan parametrede be-
lirtilen adet kadar karakter alarak metin oluşturur. Kullanımı şu şekildedir:
103
4
C# Program Yapısı
Araştırmalarla
İlişkilendir
Günlük Hayatta Fonksiyonlar • Bütün yazılım hizmetleri algoritmalarla yapılır.
Matematik her anlamda hayatımıza doğru- Algoritmanın temeli ise matematiksel fonksi-
dan etki etmektedir. Biz bunu her zaman fark et- yonlardır.
mesek de matematiksiz bir hayat aslında düşünü- • Otomat cihazları fonksiyon mantığıyla çalışırlar.
lemez. Matematiğin en önemli konularından biri • Ekonomik tahminler, beklentiler, ölçümler
ise fonksiyonlardır. Her ne kadar günlük hayatta matematiksel fonksiyonlarla hesaplanır.
kullandığımız problemlerle ilgisiz gibi görünse
• Termometreler genleşme sonucu sıcaklığı ma-
de fonksiyonlar konusu da günlük yaşam için
tematiksel bir işlem mantığıyla bize sunarlar.
önemlidir. Bu yazıda günlük hayatta fonksiyon-
lar üzerinde duracağız. • Bir aracın ne kadar sürede ne yakacağı aracın ya-
kıt performans fonksiyonunun bir ürünüdür.
Fonksiyonlar iki veri arasındaki ilişkiyi orta-
ya koyan bağıntılardır. Basit bir örnekle bir yatı- • Herhangi bir veri tahminimde önceki veriyle yeni
rım aracı 2 kat kazanıyorsa bunu f(x) = 2x şeklin- veri arasındaki ilişki fonksiyonla ifade edilir.
de ifade edebiliriz. Yani 1 lira koyduğunuzda 2 • Ekonomide çıktılar girdilerin birer fonksiyo-
lira olan şeyi bir fonksiyonla ifade edebiliriz. nudur. Bu girdileri değiştirerek fonksiyonların
Matematikte çok daha karmaşık fonksiyon büyümesi sağlanır.
işlemleri bulunmaktadır. Her işlem aynı zaman- Eğer bir matematikçi değilseniz ya da iş saha-
da bir fonksiyon olduğu için bu konunun anlaşıl- nızda yaygın olarak matematik kullanmıyorsanız
ması matematik için çok önemlidir. bunların farkına çok varmayabilirsiniz. Ancak sa-
Şimdi de günlük hayatta fonksiyonların kul- hip olduğumuz birçok şey için fonksiyonlar kul-
lanımına biraz değinelim. lanıldığı için fonksiyonların günlük hayatımıza
etkisi de büyüktür.
Günlük Yaşamda veya Doğada Fonksiyon
Konusunun Yeri Nedir? Modern yaşam modern matematik bilgisiyle
inşa edilmiştir. Fiziğin gelişmesi bile matematiğin
Günlük yaşamda fonksiyonların çok geniş
gelişmesiyle mümkün olmuştur. Fonksiyonlar ise
kullanım alanları bulunmaktadır. Bunların hep-
matematiğin geliştirilmesindeki ana etmenlerden
sinin farkında olmayabiliriz. Birkaç örnekle gös-
biridir.
terelim:
• Bilgisayar, telefon gibi teknolojik cihazların
işlemcileri matematiksel fonksiyonlarla dizayn Kaynak: Yılmaz, M. (2020). Günlük Hayatta
edilir. Fonksiyonlar. (2021, 20 Ağustos) https://tercih-
rehberin.com/gunluk-hayatta-fonksiyonlar/
Öğrenme Çıktısı
4 String sınıfının özelliklerini kullanabilme
104
4
İleri Programlama I
Belli bir işlemi yapmak için özelleşmiş kod bloklarına metot denir. Kod içerisinde sürekli kullanılacak işlemler
metotlara ayrılabilir. Böylece hem kodun okunurluğu artacak hem de bakım ve güncelleme zamanı kısalacaktır.
Tüm metotlar bir struct veya bir class yapısı içinde tanımlanmalıdır. C# dilinde, programların çalışabilmesi için
Main metodunun tanımlı olması gerekmektedir. Ayrıca metotlara erişim belirleyicilerin eklenmesi, isimlendir-
melerinin kurallara uyması, geri döndürdüğü değer türünün belirtilmesi gibi durumlara dikkat edilmelidir.
Hazırlanan metotlar da bu metotların tanımlamalarına uygun şekilde ve uygun parametreler ile bir metot
içerisinden çağrılmalıdır. Kendi kendini çağıran metotlara da rastlayabiliriz. Bunlara özyinelemeli (recursive)
metotlar denmektedir. İçlerine eklenen kontrol durumu sağlanan kadar metot kendi kendini çağırmaya de-
vam eder.
Bir sınıf içinde aynı isimli birden çok metot yazılabilir. Burada dikkat edilmesi gereken nokta, metotların pa-
rametrelerindeki türlerin ya da parametre sayılarının farklı olması gerekmektedir. Bu duruma metotların aşırı
yüklenmesi (method overloading) denmektedir.
Matematiksel işlemleri
2 programlama dilini karşılıkları
ile ilişkilendirebilme
Matematik Sınıfı
Matematiksel hesaplamalarda kullanılmak üzere tasarlanmış bir sınıftır. Bir sayının kuvvetini alma, kök hesap-
lama, trigonometrik hesaplamalar, logaritmik işlemler ve karşılaştırma işlemleri gibi sık kullanılan işlemler bu
sınıfta toplanmıştır. Tüm metotlar statik tanımlanmış olup, bu sınıftan kalıtım yapılamamaktadır.
Random sınıfı ise sistem zamanını kullanarak, belirlenen aralıklarda istediğimiz türde rastgele sayısal değerler
oluşturmaktadır.
105
4
C# Program Yapısı
Collection Sınıfı
Dizilerin daha gelişmiş şekli olan koleksiyonlar, nesnelerin gruplandırılmasında kullanılır. Boyutları diziler gibi
sınırlandırılmamıştır, dinamik olarak artmaya ve azalmaya imkân verir. Kullanım özelliklerine göre özelleşmiş
koleksiyon yapıları mevcuttur.
• ArrayList: Nesnelerden oluşan dizi yapısıdır. 0’dan başlayan bir indis ile elemanlarına erişilebilir.
• Hashtable: Bu liste türünde indis kullanılmaz. Elemanlarına anahtar ve buna karşılık gelen değerler şeklin-
de erişilebilir.
• Queue: İlk girenin ilk çıktığı bir kuyruk yapısıdır. Bu kuyruğun sonuna bir eleman eklemek için Enque-
ue(), başından bir eleman çekmek için de Dequeue() metotları kullanılır.
• Stack: Son girenin ilk çıktığı bir yığın yapısıdır. En üste yeni eleman eklemek için Push(), en üstten bir
eleman çekmek için de Pop() metotları kullanılır.
• Dictionary: Hashtable’ın özelleşmiş bir türüdür. Elemanları anahtar ve değer şeklinde eklenmektedir.
String Sınıfı
Bilgisayar ortamında art arda gelen karakter dizilerini temsil etmektedir. Bu karakter dizilerinin boyutları, ka-
rakter büyütme/küçültme işlemleri, metin parçalama, metin kopyalama, metin birleştirme, içerik kontrolü gibi
çeşitli işlemlerin yapılmasına izin veren bir sınıftır.
106
4
İleri Programlama I
1 Belirli görevleri yerine getirmek amacıyla 4 I. Değerlerini sistem zamanına göre oluşturur.
tasarlanmış kod bloklarına denir. Kod içerisinden
çağrılırlar ve bu yüzden belirli kurallara uygun ya- II. Kullanabilmek için bu sınıftan bir nesne
neler öğrendik?
zılması gerekmektedir. oluşturulmalıdır.
Yukarıda tanımı verilen kavram aşağıdakilerden III. Belli başlangıç ve bitiş noktaları tanımla-
hangisidir? nabilir.
A. Değişken Yukarıda özellikleri verilen sınıf aşağıdakilerden
B. Dizi hangisidir?
C. Metot A. String sınıfı
D. İşlem B. Logaritma sınıfı
E. Parametre C. Random sınıfı
D. Math sınıfı
2 Aşağıdakilerden hangisi metotların tanımlan- E. Collection sınıfı
dıkları sınıf içerisinde uyması gereken kurallardan
biri değildir? 5 I. Nesnelerden oluşmuş, çok sayıda türü
A. Birden fazla parametre alan metotlarda, para- tutabilir.
metreler arasına virgül koyulmalıdır. II. Boyutları dinamik olarak artıp azaltılabilir.
B. Metot isimleri de değişken isimleri kurallarına
uygun şekilde verilmesi III. İhtiyaca göre kullanıcılar tanımlayabilir.
C. Her zaman geri döndürdüğü değerin türü belir- Yukarıda özellikleri verilen sınıf aşağıdakilerden
tilmelidir. hangisidir?
D. Bir sınıf yapısı içinde tanımlanmalıdır. A. Collection
E. Metotların içinde mutlaka bir atama işlemi ya- B. String
pılmalıdır. C. Math
D. System.IO
3 Programların çalıştırılabilmesi için bir baş- E. Exception
langıç noktasına ihtiyaçları vardır. ….., programın
bütün işlevlerinden sorumlu, onları yaptıran hatta
başka sınıflar ile iletişim kuran ana metottur. 6 Aşağıdaki maddelerden hangisi Queue (Kuy-
ruk) yapısı için doğru verilmiş bir örnektir?
Yukarıda boş bırakılan yeri aşağıdakilerden hangisi
doğru şekilde tamamlar? A. Kütüphanedeki raflardaki kitaplar
B. Üst üste konulmuş tabaklar
A. Kurucu metot C. Market sırasında bekleyen insanlar
B. Yapıcı metot D. Sözlükteki kelimeler
C. Yıkıcı metot E. Kitabın fihrist kısmı
D. Main metot
E. Public metot
7 Aşağıdaki maddelerden hangisi String sınıfı-
nın özelliklerinden biri değildir?
A. Count
B. ToUpper
C. Length
D. ToLower
E. Compare
107
4
C# Program Yapısı
8
public static void Main(string[] args)
neler öğrendik?
{
string metin = "Programlama öğreniyorum ve eğleniyorum!";
string aranan = "en" ;
int sonuc = metin.IndexOf(aranan);
Console.WriteLine(sonuc);
}
9
double x = Math.Pow( 7, 2 ) ;
10
string metin = "C:/Program Files/Users/Documents/sample codes";
string[ ] dizi = metin.Split( ′/' );
Console.WriteLine( dizi[3] + " " + dizi[2] );
108
4
İleri Programlama I
1. C Yanıtınız yanlış ise “Metotlar” konusunu ye- 6. C Yanıtınız yanlış ise “Collection Sınıfı” konu-
niden gözden geçiriniz. sunu yeniden gözden geçiriniz.
3. D Yanıtınız yanlış ise “Metotlar” konusunu ye- 8. B Yanıtınız yanlış ise “String Sınıfı” konusunu
niden gözden geçiriniz. yeniden gözden geçiriniz.
4. C Yanıtınız yanlış ise “Matematik Sınıfı” konu- 9. A Yanıtınız yanlış ise “Matematik Sınıfı” konu-
sunu yeniden gözden geçiriniz. sunu yeniden gözden geçiriniz.
5. A Yanıtınız yanlış ise “Collection Sınıfı” konu- 10. B Yanıtınız yanlış ise “String Sınıfı” konusunu
sunu yeniden gözden geçiriniz. yeniden gözden geçiriniz.
109
4
C# Program Yapısı
Araştır Yanıt
4 Anahtarı
Böyle bir işlem yapabilmek için değer döndüren referans parametreler de var-
dır. Fakat özellikle web servislerde, çok sayıda veri döndürme işlemleri için
Araştır 1 kullanılan JSON formatında düzenlenmiş metinlerin gönderilmesi çok daha
kullanışlı olacaktır.
Metin işlemleri yapmak için sadece String sınıfına bağımlı değiliz. Yazdığımız
programda ihtiyacımıza uygun şekilde, yeni metin düzenleme metotları hazır-
Araştır 4 layabiliriz. Bu metotlardan oluşan sınıfımızı da bir kütüphane şeklinde tüm
projelerimizde kullanabiliriz.
110
4
İleri Programlama I
Kaynakça
Karaçay, T. Bölüm 12, Metotlar (2021, 15 Ağustos). https://www.baskent.edu.tr/~tkaracay/etudio/
ders/prg/csharp/ch12.pdf
C# Metotlar. (2021, 15 Ağustos). https://www.azkod.com/csharp/c-metotlar
Duran, S. (2015). C# ile Recursive İşlemler. (2021, 16 Ağustos). https://www.semihduran.com/c/c-ile-
recursive-islemler.html
Akgül, B. (2014). BPR Algoritma ve Programlama I. (2021, 16 Ağustos). https://www.slideserve.com/
chenoa/bpr151-algor-tma-ve-programlama-i
Çelen, E. (2021). C# Math Sınıfı Nedir? (2021, 17 Ağustos). https://emrecelen.com.tr/c-sharp-math-
sinifi-nedir/
Wagner, B. (2015). Collections (C#). (2021, 18 Ağustos). https://docs.microsoft.com/en-us/dotnet/
csharp/programming-guide/concepts/collections
Ders 33. Koleksiyonlar (2021, 18 Ağustos). https://tr.wikibooks.org/wiki/C_Sharp_Programlama_
Dili/Koleksiyonlar
C# Metinsel Metotlar. (2021, 18 Ağustos). https://www.azkod.com/csharp/c-metinsel-metotlar
111