﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Karalama Defterim</title>
	<atom:link href="http://www.mcoban.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mcoban.com/blog</link>
	<description>web tasarım ve programlama notlarım ve hayata dair...</description>
	<lastBuildDate>Mon, 12 Mar 2012 07:20:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Tüm Zamanların En İyi Buluşu</title>
		<link>http://www.mcoban.com/blog/tum-zamanlarin-en-iyi-bulusu/</link>
		<comments>http://www.mcoban.com/blog/tum-zamanlarin-en-iyi-bulusu/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 07:19:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[kitap]]></category>

		<guid isPermaLink="false">http://www.mcoban.com/blog/?p=420</guid>
		<description><![CDATA[Mutlaka izlemelisiniz&#8230; :)]]></description>
			<content:encoded><![CDATA[<p>Mutlaka izlemelisiniz&#8230; :)</p>
<p><iframe src="http://www.youtube.com/embed/N2pgmALR64I" frameborder="0" width="560" height="315"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mcoban.com/blog/tum-zamanlarin-en-iyi-bulusu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C NSDictionary ve NSMutableDictionary Sınıfları</title>
		<link>http://www.mcoban.com/blog/objective-c-nsdictionary-ve-nsmutabledictionary-siniflari/</link>
		<comments>http://www.mcoban.com/blog/objective-c-nsdictionary-ve-nsmutabledictionary-siniflari/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 08:26:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[NSDictionary]]></category>
		<category><![CDATA[NSMutabledictionary]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.mcoban.com/blog/?p=412</guid>
		<description><![CDATA[Dizilerden sonra en çok işimize yarayacak olan sınıflar, NSDictionary ve NSMutableDictionary sınıflarıdır. Bu sınıflar verileri &#8220;anahtar/değer&#8221; ikilisi şeklinde (key/value pairs) tutarlar. Örneğin bir sözlük yazılımı hazırladığınızı ve kelimeler ile karşılıklarını bir yerde tutmak istediğinizi düşünün. Burada key kelimenin kendisi, value ise anlamıdır. Ör: key: &#8220;pencil&#8221;, value: &#8220;kalem&#8221; gibi&#8230; Yapı olarak yine mutable olanı (NSMutableDictionary) daha [...]]]></description>
			<content:encoded><![CDATA[<p>Dizilerden sonra en çok işimize yarayacak olan sınıflar, <a href="https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003648" title="NSDictionary" target="_blank">NSDictionary</a> ve <a href="https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003692" title="NSMutableDictionary" target="_blank">NSMutableDictionary</a> sınıflarıdır. Bu sınıflar verileri <strong>&#8220;anahtar/değer&#8221; ikilisi şeklinde (key/value pairs)</strong> tutarlar. Örneğin bir sözlük yazılımı hazırladığınızı ve kelimeler ile karşılıklarını bir yerde tutmak istediğinizi düşünün. Burada <strong>key</strong> kelimenin kendisi, <strong>value</strong> ise anlamıdır. Ör: key: &#8220;pencil&#8221;, value: &#8220;kalem&#8221; gibi&#8230; </p>
<p>Yapı olarak yine <strong>mutable</strong> olanı (NSMutableDictionary) daha kullanışlıdır. Çünkü NSDictionary tanımlandığı anda değerleri ile birlikte <strong>initalize</strong> edilmesi gerekir. Sonradan (runtime) değer verilemez. Şimdi örneklere bakalım:</p>
<p><span style="font-size:120%; font-weight:bold;">NSDictionary</span></p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        // anahtar/değer çifti ile init edilerek tanımlama
        // (ilk veri "değer", ikincisi ise "anahtar")
        NSDictionary * my_dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"kalem", @"pencil", @"kitap", @"book", @"kalem", @"pen", nil];
        NSLog(@"%@", my_dict);
        // sonuc
        // book = kitap;
        // pencil = kalem;
        // pen = kalem; olacaktır.
    }
    return 0;
}
</pre>
<p>Görüldüğü gibi NSDictionary nesnesi daha initialize edilirken değerleri atanıyor. Ancak bu durum özellikle verileri çalışma zamanında (runtime) almak istediğimizde sorun olur. Bu nedenle NSMutableDictionary kullanmak zorundayız. Fakat NSMutableDictionary konusuna geçmeden önce NSDictionary sınıfının bazı metotlarına göz atalım:</p>
<p><span style="font-size:110%; font-weight:bold;">objectForKey</span></p>
<p><strong>Anahtar</strong>ı verip <strong>değer</strong>ini almak içindir.</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        NSDictionary * my_dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"kalem", @"pencil", @"kitap", @"book", @"kalem", @"pen", nil];

        // anahtarı verip değerini alıyoruz
        NSLog(@"%@", [my_dict objectForKey:@"book"]);
        sonuc "kitap" olacak
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">allKeysForObject</span></p>
<p>Bir <strong>değer</strong> için birden fazla <strong>anahtar</strong> varsa onların tümünü almak içindir.</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        NSDictionary * my_dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"kalem", @"pencil", @"kitap", @"book", @"kalem", @"pen", nil];

        // değeri verip bu değeri barındıran
        // tüm anahtarları alıyoruz
        NSLog(@"%@", [my_dict allKeysForObject:@"kalem"]);
        // sonuc "pencil, pen" olacak
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">allKeys, allValues</span></p>
<p>Tüm <strong>anahtar</strong>ları ya da tüm <strong>değer</strong>leri almak içindir</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        NSDictionary * my_dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"kalem", @"pencil", @"kitap", @"book", @"kalem", @"pen", nil];

        // tüm anahtarları alıyoruz
        NSLog(@"%@", [my_dict allKeys"]);
        // sonuc "pencil, pen, book" olacak

        // tüm değerleri alıyoruz
        NSLog(@"%@", [my_dict allValues"]);
        // sonuc "kalem, kitap, kalem" olacak
    }
    return 0;
}
</pre>
<p>NSDictionary sınıfının metotlarından bazılarını gördükten sonra artık NSMutableDictionary sınıfına geçebiliriz.</p>
<p><span style="font-size:120%; font-weight:bold;">NSMutableDictionary</span></p>
<p>Tanımlama yöntemleri hemen hemen aynıdır ama değerleri baştan verilerek initialize edilme zorunluluğu yoktur ve çalışma zamanında anahtar/değer çifti (key/value pair) eklenebilir. <strong>Ayrıca yukarıda sözünü ettiğim NSDictionary sınıfına metotlar, bu sınıfta da vardır ve aynı biçimde kullanılmaktadır.</strong> O nedenle burada tekrar anlatmayacağım. Şimdi bu sınıfın yukarıda bahsedilmeyen diğer metotlarından bazılarını inceleyelim:</p>
<p><span style="font-size:110%; font-weight:bold;">setObject, setValue</span></p>
<p>Her iki metot da NSMutableDictionary türünden nesnemize yeni bir <strong>anahtar/değer</strong> ikilisi eklememizi ya da var olan bir anahtarın değerini değiştirmemizi sağlar.</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        NSMutableDictionary * my_dict = [[NSDictionary alloc]init];

        // yeni anahtar/değer ikilisi ekliyoruz
        [my_dict setObject:@"book" forKey:@"kitap"];
        [my_dict setValue:@"pencil" forKey:@"kalem"];
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">removeObjectForKey, removeObjectsForKeys, removeAllObjects</span></p>
<p><strong>removeObjectForKey</strong>, anahtar vererek eleman siler. <strong>removeObjectsForKeys</strong> ise kendisine verilen bir NSArray türündeki dizide belirtilen anahtarları NSMutableDictionary içinden bulur ve siler. <strong>removeAllObjects</strong> ise tüm elemanları siler.</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        NSMutableDictionary * my_dict = [[NSMutableDictionary alloc]init];
        [my_dict setObject:@"kalem" forKey:@"pencil"];
        [my_dict setObject:@"kitap" forKey:@"book"];
        [my_dict setObject:@"semsiye" forKey:@"umbrella"];

        // anahtar vererek eleman siler
        [my_dict removeObjectForKey:@"umbrella"];

        NSLog(@"%@", my_dict);
        // sonuc "book = kitap; pencil = kalem;" olur

        // tüm elemanları siler
        [my_dict removeAllObjects];

        NSLog(@"%@", my_dict);

       /*******************************************/
       // removeObjectsForKeys
        NSMutableDictionary * my_dict2 = [[NSMutableDictionary alloc]init];
        [my_dict2 setObject:@"kalem" forKey:@"pencil"];
        [my_dict2 setObject:@"kitap" forKey:@"book"];
        [my_dict2 setObject:@"semsiye" forKey:@"umbrella"];

        NSLog(@"%@", my_dict2);
        // sonuc "book = kitap; pencil = kalem;" olur

        // silinecek anahtarlar dizisi
        NSArray * silinecekler = [[NSArray alloc]initWithObjects:@"pencil", @"book", nil];

        // yukarıdaki dizide belirtilen elemanları siler
        [my_dict2 removeObjectsForKeys:silinecekler];

        NSLog(@"%@", my_dict2);
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">count</span></p>
<p>Bu metot nesnemizdeki toplam <strong>tekil anahtar sayısını</strong> verir. Yani aşağıdaki örnekte olduğu gibi birden fazla &#8220;umbrella&#8221; anahtarınız var ise onları 1 sayacaktır.</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        NSMutableDictionary * my_dict = [[NSMutableDictionary alloc]init];
        [my_dict setObject:@"kalem" forKey:@"pencil"];
        [my_dict setObject:@"kitap" forKey:@"book"];
        [my_dict setObject:@"semsiye" forKey:@"umbrella"];
        [my_dict setObject:@"yagmurluk" forKey:@"umbrella"];

        // tüm değerler
        NSLog(@"eleman sayisi: %lu", [my_dict count]);
        // sonuc "3" döner
    }
    return 0;
}
</pre>
<p>Faydalı olması dileğiyle&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mcoban.com/blog/objective-c-nsdictionary-ve-nsmutabledictionary-siniflari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C NSString ve NSMutableString Sınıfları</title>
		<link>http://www.mcoban.com/blog/objective-c-nsstring-ve-nsmutablestring-siniflari/</link>
		<comments>http://www.mcoban.com/blog/objective-c-nsstring-ve-nsmutablestring-siniflari/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 16:18:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[NSMutableString]]></category>
		<category><![CDATA[NSString]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.mcoban.com/blog/?p=410</guid>
		<description><![CDATA[Objective-C dilinde string (dize) işlemleri için en çok kullanılan sınıflar NSString ve NSMutableString sınıflarıdır. Mutable ve Immutable arasındaki farkdan daha önce diziler ile ilgili yazımda kısaca söz etmiştim. Burada da benzer bir durum söz konusu. Şimdi sırasıyla önce NSString sonra da NSMutableString için örnek kullanım biçimleri üzerinden gidelim: NSString: #import &#60;Foundation/Foundation.h&#62; int main (int argc, [...]]]></description>
			<content:encoded><![CDATA[<p>Objective-C dilinde string (dize) işlemleri için en çok kullanılan sınıflar <a href="https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/doc/uid/TP40003744" title="NSString Reference" target="_blank">NSString</a> ve <a href="https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableString_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003695" title="NSMutableString Reference" target="_blank">NSMutableString</a> sınıflarıdır. <strong>Mutable</strong> ve <strong>Immutable</strong> arasındaki farkdan daha önce <a href="http://www.mcoban.com/blog/objective-c-ile-diziler/">diziler ile ilgili yazımda</a> kısaca söz etmiştim. Burada da benzer bir durum söz konusu. Şimdi sırasıyla önce <strong>NSString </strong>sonra da <strong>NSMutableString</strong> için örnek kullanım biçimleri üzerinden gidelim:</p>
<p><span style="font-size:120%; font-weight:bold;">NSString:</span></p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        // basitce bir NSString nesnesine değer atama
        NSString * str;
        str = @"bahcede 1 tane kedi var.";
        NSLog(@"%@", str);

        NSString * str0 = @"bahcede 2 tane kedi var.";
        NSLog(@"%@", str0);

        // diğer bir yöntem
        NSString * str1 = [[NSString alloc]init];
        str1 = @"bahcede 3 tane kedi var.";
        NSLog(@"%@", str1);

        // diğer bir yöntem daha
        NSString * str2 = [[NSString alloc]initWithString:@"bahcede 4 tane kedi var"];
        NSLog(@"%@", str2);

        // farklı türde bir değişkenden gelen değeri alarak tanımlama
        int adet = 5;
        NSString * str3 = [[NSString alloc]initWithFormat:@"bahcede %i tane kedi var", adet];
        NSLog(@"%@", str3);
    }
    return 0;
}
</pre>
<p>Yukarıdaki tanımlama biçimlerinin tamamı geçerlidir. NSString bir nesne olduğu için tanımlamalarda NSString ifadesinden hemen sonra mutlaka <strong>asteriks (*)</strong> karakteri kullanılmalıdır. Şimdi NSString sınıfının çok kullanılan bazı metotlarına göz atalım:</p>
<p><span style="font-size:110%; font-weight:bold;">stringByAppendingFormat:</span></p>
<p>Bu metot bir string verinin içine bir değişkenden gelen farklı türlerdeki veriyi string içindeki herhangi bir noktaya eklemekte kullanılır. Örnekte <strong>adet</strong> değişkeninden gelen değer <strong>str1</strong> içine <strong>%i</strong> belirteciyle alınmaktadır. Tüm <strong>Dize Biçimi Belirteçleri (String Format Specifiers)</strong>&#8216;nin listesini <a href="https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265" title="Objective-C Dize Biçimi Belirteçleri (String Format Specifiers)" target="_blank">şurada</a> bulabilirsiniz.</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        int adet = 5;

        NSString * str1 = [[NSString alloc]init];
        str1 = [str1 stringByAppendingFormat:@"bahcede %i tane kedi var", adet];

        NSLog(@"%@", str1);
        // sonuç "bahcede 5 tane kedi var" olur.
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">stringByAppendingString:</span></p>
<p>Bu metot bir string verinin başına ya da sonuna bir değişkenden gelen ya da sabit olarak tanımlanmış NSString türündeki verileri verileri eklemekte kullanılır. </p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        NSString * str1 = @"bahcede 5 tane ";
        str1 = [str1 stringByAppendingString:@"kedi var."];
        NSLog(@"%@", str1);
        // "bahcede 5 tane kedi var" olur.
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">substringFromIndex:</span></p>
<p>Bu metot bir string dizesindeki belirtilen indeksten başlayarak (belirtilen indeks de dahil) sonuna kadar olan kısmını döndürür:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        NSString * str1 = @"bahcede 5 tane kedi var.";

        // 3. indeksten başlayarak almak için (3. de dahil)
        NSString * str2 = [str1 substringFromIndex:3];
        NSLog(@"%@", str2);

        // ya da NSLog içinde doğrudan metot çağrılabilir
        NSLog(@"%@", [str1 substringFromIndex:3]);

        //sonuc "cede 5 tane kedi var."
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">substringToIndex:</span></p>
<p>Bu metot bir string dizesinde baştan itibaren belirtilen indekse kadar (belirtilen indeks hariç) olan kısmını döndürür:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        NSString * str1 = @"bahcede 5 tane kedi var.";

        // 12. indekse kadar (12. hariç)
        NSString * str2 = [str1 substringToIndex:12];
        NSLog(@"%@", str2);

        // ya da NSLog içinde doğrudan metot çağrılabilir
        NSLog(@"%@", [str1 substringToIndex:12]);

        //sonuc "bahcede 5 ta" olacaktır.
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">substringWithRange:</span></p>
<p>Bu metot bir string dizesinde baştan itibaren belirtilen indeksten (belirtilen indeks dahil) belirtilen adet kadar olan kısmını döndürür. <a href="https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html#//apple_ref/doc/c_ref/_NSRange" title="NSRange" target="_blank">NSRange</a> türünde bir parametre alır. Onu da <a href="https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/func/NSMakeRange" title="NSMakeRange" target="_blank">NSMakeRange</a> metoduyla substringWithRange metodumuza parametre olarak veriyoruz.</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        NSString * str1 = @"bahcede 5 tane kedi var.";

        // 2. indeksten başla ve 2. dahil 10 karakter al
        NSString * str2 = [str1 substringWithRange:NSMakeRange(2, 10)];
        NSLog(@"%@", str2);

        // ya da NSLog içinde doğrudan metot çağrılabilir
        NSLog(@"%@", [str1 substringWithRange:NSMakeRange(2, 10)]);

        //sonuc "hcede 5 ta" olur.
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">uppercaseString, lowercaseString, capitalizedString:</span></p>
<p>Bu metotlar kendisine verilen string dizesini tümü büyük harf, tümü küçük harf ya da sadece kelimelerin ilk harfleri büyük olacak biçimde döndürür:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        NSString * str1 = @"bAhcEDe 5 taNE kedi VAR.";

        NSLog(@"%@", [str1 uppercaseString]);
        // sonuc "BAHCEDE 5 TANE KEDI VAR."

        NSLog(@"%@", [str1 lowercaseString]);
        // sonuc "bahcede 5 tane kedi var."

        NSLog(@"%@", [str1 capitalizedString]);
        // sonuc "Bahcede 5 Tane Kedi Var."
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">isEqualToString:</span></p>
<p>Bu metot iki string değerini karşılaştırarak aynı değere sahip olup olmadığını kontrol eder ve bool sonuç döndürür. Ayrıca bu metot büyük-küçük harfe duyarlıdır:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        NSString * str1 = @"bAhcEDe 5 taNE kedi VAR.";
        NSString * str2 = @"bAhcEDe 5 taNE kedi VAR.";
        NSLog(@"%i", [str1 isEqualToString:str2]);
        // sonuc "1" döner

        NSString * str3 = @"BAHCEDE 5 TANE KEDI VAR.";
        NSString * str4 = @"bahcede 5 tane kedi var.";
        NSLog(@"%i", [str3 isEqualToString:str4]);
        // sonuc "0" döner

        NSString * str5 = @"BAHCEDE 5 TANE KEDI VAR.";
        NSString * str6 = @"bahcede hic kedi yok.";
        NSLog(@"%i", [str5 isEqualToString:str6]);
        // sonuc "0" döner
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">NSString dizesindeki rakamları dönüştürme:</span></p>
<p>Bu iş için <strong>intValue, floatValue, doubleValue</strong> gibi metotlar kullanılır. Örnekler:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        NSString * str1 = @"55";
        int sayi1 = [str1 intValue];
        NSLog(@"%i", sayi1);
        // sonuc "55" olur.

        NSString * str2 = @"55.21";
        float sayi2 = [str2 floatValue];
        NSLog(@"%f", sayi2);
        // sonuc "55.209999" olur.

        NSString * str3 = @"32547125746.25";
        double sayi3 = [str3 doubleValue];
        NSLog(@"%f", sayi3);
        // sonuc "32547125746.250000" olur.
    }
    return 0;
}
</pre>
<p><span style="font-size:120%; font-weight:bold;">NSMutableString:</span></p>
<p>Tanımlama yöntemleri yine NSString&#8217;e benzer biçimdedir. Ek olarak NSString türünde olmayan metotları vardır.</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        NSMutableString * str2 = [[NSMutableString alloc]initWithString:@"bahcede 7 tane kedi var."];
        NSLog(@"%@", str2);

        int adet = 8;
        NSMutableString * str3 = [[NSMutableString alloc]initWithFormat:@"bahcede %i tane kedi var.", adet];
        NSLog(@"%@", str3);
    }
    return 0;
}
</pre>
<p>NSMutableString sınıfına ait metotlardan bazıları:</p>
<p><span style="font-size:110%; font-weight:bold;">setString:</span></p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        NSMutableString * str = [[NSMutableString alloc]init];

        [str setString:@"bahcede 6 tane kedi var."];
        NSLog(@"%@", str);
        // sonuc "bahcede 6 tane kedi var."
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">appendString:</span></p>
<p>NSString&#8217;deki <strong>stringByAppendingString</strong> ile aynı görevi görür:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        NSMutableString * str2 = [[NSMutableString alloc]init];
        [str2 setString:@"bahcede 4 "];
        [str2 appendString:@"tane kedi var."];
        NSLog(@"%@", str2);
        // sonuc "bahcede 4 tane kedi var."
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">appendFormat:</span></p>
<p>NSString&#8217;deki <strong>stringByAppendingFormat</strong> ile aynı görevi görür:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        NSMutableString * str1 = [[NSMutableString alloc]init];
        int adet = 9;
        [str1 appendFormat:@"bahcede %i tane kedi var.", adet];
        NSLog(@"%@", str1);
        // sonuc "bahcede 9 tane kedi var."
    }
    return 0;
}
</pre>
<p><span style="font-size:110%; font-weight:bold;">replaceCharactersInRange:</span></p>
<p>NSString&#8217;de olmayan bu metot belli bir aralıktaki karakterleri bulup belirlenen karakterlerle değiştirmek içindir:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        // 0. indeksten başlayarak (0 da dahil) 7 karakteri
        // seç ve değiştir
        NSMutableString * str3 = [[NSMutableString alloc]init];
        [str3 setString:@"bahcede 10 tane kedi var"];
        [str3 replaceCharactersInRange:NSMakeRange(0, 7) withString:@"sokakta"];
        NSLog(@"%@", str3);
        // sonuc "sokakta 10 tane kedi var."
    }
    return 0;
}
</pre>
<p>Bunlara ek olarak NSString&#8217;de olan <strong>uppercaseString, lowercaseString, capitalizedString, isEqualToString, substringWithRange, substringToIndex, substringFromIndex</strong> metotları ve kullanımı burada da aynıdır. O nedenle örnek vermeye gerek duymadım.</p>
<p>Elbette bu sınıfların metotları bu kadarla sınırlı değil. Ben sadece en çok kullanılanları anlatmaya çalıştım.</p>
<p>Faydalı olması dileğiyle&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mcoban.com/blog/objective-c-nsstring-ve-nsmutablestring-siniflari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C İle Diziler</title>
		<link>http://www.mcoban.com/blog/objective-c-ile-diziler/</link>
		<comments>http://www.mcoban.com/blog/objective-c-ile-diziler/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 10:14:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[NSArray]]></category>
		<category><![CDATA[NSMutableArray]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.mcoban.com/blog/?p=406</guid>
		<description><![CDATA[Objective-C dilinde yaygın olarak iki türde dizi yapısı kullanılmaktadır. NSArray ve NSMutableArray&#8230; Her iki referans türü de temelde aynı işi yapmakla birlikte aslında aralarında önemli bir fark vardır. NSArray immutable (değişmez), NSMutableArray ise mutable (değişken) yapıya sahiptir. Bunun anlamı şudur: NSArray yapısı tanımlandıktan ve içeriği oluşturulduktan sonra (içerik ekleme hariç) değiştirilemez ancak, NSMutableArray bize ekleme, [...]]]></description>
			<content:encoded><![CDATA[<p>Objective-C dilinde yaygın olarak iki türde dizi yapısı kullanılmaktadır. <strong>NSArray</strong> ve <strong>NSMutableArray</strong>&#8230; Her iki referans türü de temelde aynı işi yapmakla birlikte aslında aralarında önemli bir fark vardır. <strong>NSArray immutable (değişmez), NSMutableArray ise mutable (değişken)</strong> yapıya sahiptir. Bunun anlamı şudur: NSArray yapısı tanımlandıktan ve içeriği oluşturulduktan sonra (içerik ekleme hariç) değiştirilemez ancak, NSMutableArray bize ekleme, silme, değiştirme gibi tüm imkanları sağlayan bir yapıya sahiptir. Örnekler üzerinden gidelim&#8230;</p>
<p><strong>NSArray Örneği:</strong></p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        // initWithObjects ile tanımlarken içerik ekliyoruz.
        NSArray * gunler = [[NSArray alloc] initWithObjects: @"pazartesi", @"sali", @"carsamba", @"persembe", nil];

        // NSArray türündeki diziye içerik ekleme
        gunler = [gunler arrayByAddingObject:@"cuma"];
        gunler = [gunler arrayByAddingObject:@"cumartesi"];
        gunler = [gunler arrayByAddingObject:@"pazar"];

        NSLog(@"%@", gunler);

        // ya da döngüyle içeriği okuyabiliriz
        for (NSString * gun in gunler) {
            NSLog(@"%@", gun);
        }

        // indeksi verilen elemanın değerini almak
        NSLog(@"%@", [gunler objectAtIndex:1]);
        // "sali" döner

        // değeri verilen elemanın indeksini almak
        NSLog(@"%lu", [gunler indexOfObject:@"carsamba"]);
        // "2" döner.

        // dizinin eleman sayısını almak
        NSLog(@"%lu", [gunler count]);
        // "7" döner.
    }
    return 0;
}
</pre>
<p>Dizinin tanımının sonundaki <strong>nil</strong> ifadesi dizinin son indeksinin bulunduğu konumu işaret eder ve <strong>initWithObjects</strong> ya da <strong>arrayWithObjects</strong> metotları ile oluşturulurken gereklidir. En sondaki <strong>@&#8221;%lu&#8221;</strong> ifadesi <strong>indexOfObject</strong> metodu <strong>NSUIntenger (unsigned long)</strong> türünde değer döndürdüğü içindir.</p>
<p><strong>NSMutableArray Örneği:</strong> </p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        // initWithObjects ile tanımlarken içerik ekliyoruz.
        NSMutableArray * aylar = [[NSMutableArray alloc] initWithObjects: @"ocak", @"subat", @"mart", @"nisan", nil];

        // diziye eleman ekleme
        [aylar addObject:@"mayis"];
        [aylar addObject:@"haziran"];
        [aylar addObject:@"temmuz"];
        [aylar addObject:@"agustos"];
        [aylar addObject:@"deneme"];
        [aylar addObject:@"eylul"];
        [aylar addObject:@"ekim"];
        [aylar addObject:@"kasim"];
        [aylar addObject:@"aralik"];

        NSLog(@"%@", aylar);

        // dizideki bir elemanın indeksiyle içeriğini değiştirme
        // "deneme" yi "yanilma" olarak değiştiriyoruz
        [aylar replaceObjectAtIndex:8 withObject:@"yanilma"];

        NSLog(@"%@", aylar);

        /*****************************************************/

        // dizideki bir elemanın değeriyle (object) içeriğini değiştirme
        // önce "yanilma" nın ideksini alıyoruz
        NSUInteger yanilmanin_indeksi = [aylar indexOfObject:@"yanilma"];

        // "yanilma" yı "degistirilmis" olarak değiştiriyoruz
        [aylar replaceObjectAtIndex:yanilmanin_indeksi withObject:@"degistirilmis"];

        NSLog(@"%@", aylar);

        /*****************************************************/

        // dizideki bir indekse eleman ekleme (insert)

        [aylar insertObject:@"araya eklenmis" atIndex:8];

        NSLog(@"%@", aylar);

        /*****************************************************/

        // dizideki bir elemanı silme

        [aylar removeObject:@"araya eklenmis"];
        [aylar removeObjectAtIndex:8]; // "degistirilmis" silinecek

        NSLog(@"%@", aylar);

        /*****************************************************/
        // dizinin eleman sayısını almak
        NSLog(@"%lu", [aylar count]);
        // "12" döner.
    }
    return 0;
}
</pre>
<p>Görüldüğü gibi NSMutableArray yapısı bize daha fazla hareket imkanı sağlıyor. O nedenle bu yapı Objective-C içindeki en ideal dizi yapısı. Elbette yapının tüm imkanları bu kadar değil. Burada sadece en temel olanlarından söz ettim.</p>
<p>Faydalı olması dileğiyle&#8230; </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mcoban.com/blog/objective-c-ile-diziler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# İle Renk Dönüşümleri</title>
		<link>http://www.mcoban.com/blog/csharp-ile-renk-donusumleri/</link>
		<comments>http://www.mcoban.com/blog/csharp-ile-renk-donusumleri/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 00:43:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[hex]]></category>
		<category><![CDATA[rgb]]></category>

		<guid isPermaLink="false">http://www.mcoban.com/blog/?p=409</guid>
		<description><![CDATA[ASP.NET ile web form uygulamalarımızı yazarken kullandığımız server kontrollerindeki renklendirmelerde duruma göre bazen System.Drawing.Color sınıfındaki renk tanımlarından, bazen de CSS stilllerinden/sınıflarından faydalanırız. CSS stillendirmelerinde renkler genellikle aşağıdaki gibi üç yöntemden biri ile yapılır. CSS Renk Adı, Hex Kodu, RGB değerleri&#8230; .my-class { color:#ff0000; /* Hex değer */ color:red; /* renk adı */ color:rgb(255, 0, 0); [...]]]></description>
			<content:encoded><![CDATA[<p>ASP.NET ile web form uygulamalarımızı yazarken kullandığımız server kontrollerindeki renklendirmelerde duruma göre bazen <a href="http://msdn.microsoft.com/en-us/library/system.drawing.color.aspx" title="System.Drawing.Color">System.Drawing.Color</a> sınıfındaki renk tanımlarından, bazen de CSS stilllerinden/sınıflarından faydalanırız. CSS stillendirmelerinde renkler genellikle aşağıdaki gibi üç yöntemden biri ile yapılır. <a href="http://www.w3schools.com/cssref/css_colornames.asp" title="CSS Renk Adı">CSS Renk Adı</a>, <a href="http://www.w3schools.com/cssref/css_colorsfull.asp" title="Hex Kodu">Hex Kodu</a>, <a href="http://www.w3schools.com/cssref/css_colors.asp" title="RGB Değerleri">RGB değerleri</a>&#8230;</p>
<pre name="code" class="css">
.my-class {
    color:#ff0000; /* Hex değer */
    color:red; /* renk adı */
    color:rgb(255, 0, 0);
}
</pre>
<p>Ancak bazen ASP.NET sayfalarımızda kod tarafında bu renk değerlerinin <strong>System.Drawing.Color</strong> türüne, ya da <strong>System.Drawing.Color</strong> türündeki bir rengin <strong>HTML</strong> ya da <strong>CSS</strong> içinde kullanmak üzere <strong>CSS renk adı, RGB</strong> ya da <strong>Hex</strong> biçimine ihtiyaç duyarız. İşte böyle durumlarda aşağıdaki <a href="http://msdn.microsoft.com/en-us/library/system.drawing.aspx" target="_blank">System.Drawing</a> namespace&#8217;i altındaki <a href="http://msdn.microsoft.com/en-us/library/system.drawing.color.aspx" title="System.Drawing.Color">Color</a> ve <a href="http://msdn.microsoft.com/en-us/library/system.drawing.colortranslator.aspx" target="_blank">ColorTranslater</a> sınıflarına ait metotlar işimizi oldukça kolaylaştıracaktır. Ancak projenize <a href="http://msdn.microsoft.com/en-us/library/system.drawing.aspx" target="_blank">System.Drawing</a> namespace&#8217;ini eklemeyi sakın unutmayın!</p>
<pre name="code" class="csharp">
// ARGB değerleri verilmiş olan rengi HTML hex renk değerine dönüştürme
ColorTranslator.ToHtml(Color.FromArgb(255, 15, 65, 0));
// #ff0f41 döner

// RGB değerleri verilmiş olan rengi HTML hex renk değerine dönüştürme
ColorTranslator.ToHtml(Color.FromArgb(0, 85, 36));
// #005524 döner

// "System.Drawing.Color" türündeki rengi HTML hex renk değerine dönüştürme
String.Format("#{0:X2}{1:X2}{2:X2}", Color.Blue.R, Color.Blue.G, Color.Blue.B);
// #0000ff döner

// "#FF0000" şeklindeki Hex renk değerini "System.Drawing.Color" türüne dönüştürme.
ColorTranslator.FromHtml("#00ff00");
// "System.Drawing.Color.FromArgb(255, 0, 255, 0)" döner

// Ör: "Blue" şeklindeki HTML renk ismini "System.Drawing.Color" türüne dönüştürme.
ColorTranslator.FromHtml("Maroon");
// "System.Drawing.Color.Maroon" döner
</pre>
<p>Faydalı olması dileğiyle&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mcoban.com/blog/csharp-ile-renk-donusumleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C İle Döngüler</title>
		<link>http://www.mcoban.com/blog/objective-c-ile-donguler/</link>
		<comments>http://www.mcoban.com/blog/objective-c-ile-donguler/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 15:33:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[do while]]></category>
		<category><![CDATA[for]]></category>
		<category><![CDATA[foreach]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[while]]></category>

		<guid isPermaLink="false">http://www.mcoban.com/blog/?p=405</guid>
		<description><![CDATA[Döngüler programlama dillerinde tekrar eden işleri kolaylıkla yapmamızı sağlayan yapılardır. Objective-C ile üç türlü döngü ifadesi vardır. Bunları inceleyelim: for döngüsü: C türevi olan tüm programlama dillerinde en çok kullanılan döngü türüdür. Örnek: #import &#60;Foundation/Foundation.h&#62; int main (int argc, const char * argv[]) { @autoreleasepool { // for (baslangic degeri; kosu; artma miktari) // i++ [...]]]></description>
			<content:encoded><![CDATA[<p>Döngüler programlama dillerinde tekrar eden işleri kolaylıkla yapmamızı sağlayan yapılardır. Objective-C ile üç türlü döngü ifadesi vardır. Bunları inceleyelim:</p>
<p><span style="font-size:120%; font-weight:bold;">for döngüsü:</span></p>
<p>C türevi olan tüm programlama dillerinde en çok kullanılan döngü türüdür. Örnek:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{

    @autoreleasepool {

        // for (baslangic degeri; kosu; artma miktari)
        // i++ ifadesindeki ++, i'nin değerini döngünün her tekrarında 1 arttırır.
        for (int i = 0; i < 10; i++) { 

            // döngünün her tekrarında aşağıdaki kod bloğu çalışacak
            // %i ifadesi ile kaçıncı turda olduğunu da yazdırıyoruz
            NSLog(@"Dongunun %i. iterasyonu", i);
            // ekrana 10 kez yukarıdaki ifade yazılır.
        }
    }
    return 0;
}
</pre>
<p>Özellikle dizilerin elemanlarını for yardımıyla okuyabilir, değiştirebilir hatta silebiliriz. Dizileri ayrı bir yazımda anlatmayı düşündüğüm için bu yazıda sadece dizi elemanlarının değerlerini okuma örneğini vereceğim:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{

    @autoreleasepool {

        // 5 elemanlı bir dizi tanımladık
        int sayilar[5] = { 23, 85, 16, 47, 2 };

        for (int i = 0; i < 5; i++) {

            // ilk %i ifadesi ile döngünün kaçıncı turda olduğunu
            // 2. %i ifadesi ile dizinin i'inci elemanının değerini alıyoruz
            // NSLog içindeki "i, sayilar[i]" ifadesi sırasıyla

            NSLog(@"sayilar[%i] = %i", i, sayilar[i]);
            // ekrana dizinin tüm elemanlarının değeri yazdırılacak.
        }
    }
    return 0;
}
</pre>
<p><span style="font-size:120%; font-weight:bold;">foreach döngüsü:</span></p>
<p>Bir diğer döngü türü ise <strong>foreach</strong> yapısıdır. Bu yapı daha çok dizilerdeki elemanların içeriğini okumak için kullanılır. Ancak bir dizinin elemanlarının içeriğini döngü ile değiştirmek istiyorsanız bunu <strong>for</strong> ile yapmak zorundasınız. Çünkü <strong>foreach yapısı her iterasyonda size dizinin o anki elemanını değil sadece o elemanın değerini verir.</strong> Bu yapı Objective-C'de diğer C türevi dillerin aksine foreach ile değil, yine for ile başlar.</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{

    @autoreleasepool {

        // NSArray sınıfıyla bir dizi tanımlama
        NSArray * sayilar = [[NSArray alloc] initWithObjects:@"23", @"85", @"16", @"47", @"2", nil];

        // diziye sonradan bir eleman daha ekliyoruz
        sayilar = [sayilar arrayByAddingObject:@"33"];

        // NSArray sınıfından dönen elemanlar "id" türündedir.
        for (id sayi in sayilar) {
            NSLog(@"%@", sayi);
            // ekrana dizinin tüm elemanlarının değeri sırayla yazdırılacak.
        }
    }
    return 0;
}
</pre>
<p><span style="font-size:120%; font-weight:bold;">while döngüsü:</span></p>
<p><strong>while</strong> döngüsü, belirtilen koşul sağlandığı sürece devam eden bir döngüdür. Örnek olarak aşağıdaki döngüde kullanıcıdan sürekli bir sayı girmesini istiyoruz. <strong>Ta ki '0' değerini girinceye kadar.</strong> Sonrasında da girdiği tüm değerlerin toplamını ekrana yazdırıyoruz:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{

    @autoreleasepool {

        int girilen_sayi, toplam;

        // kullanıcıdan bir sayı girmesini istiyoruz
        NSLog(@"Bir sayi giriniz:");

        // girilecek değer int türünde olduğundan
        // %i belirtiyoruz ve "girilen_sayi" değişkenine atıyoruz
        scanf("%i", &#038;girilen_sayi);

        // sayı 0 değilse döngü içindeki kodlar çalışsın
        while (girilen_sayi != 0) {
            // her seferinde girilen sayı ile
            // önceki sayıların toplamını alıyoruz
            toplam += girilen_sayi;

            // yine bir sayı istiyoruz
            NSLog(@"Bir sayi giriniz:");
            scanf("%i", &#038;girilen_sayi);

        }

        // insert code here...
        NSLog(@"Toplam: %i", toplam);

    }
    return 0;
}
</pre>
<p>Örnekteki while döngüsü içindeki <strong>toplam += girilen_sayi</strong> ifadesindeki <strong>+=</strong>, kendisinden önce gelen değere kendisinden sonra gelen değeri eklemeyi sağlıyor. Aynı ifade  <strong>toplam = toplam + girilen_sayi</strong> biçiminde de yazılabilirdi. Ancak yukarıdaki yazım biçimi daha pratiktir. Hatta daha performanslı çalıştığını da duymuştum.</p>
<p><span style="font-size:120%; font-weight:bold;">do while döngüsü:</span></p>
<p>Aslında <strong>do while</strong> yapısının while'dan tek bir farkı var. O da belirtilen koşul sağlansa da sağlanmasa da döngü baştan bir kez çalışır ve ondan sonraki iterasyonlarda koşulun sağlanıp sağlanmadığı kontrol edilir. Az önceki örneği <strong>do while</strong> kullanarak aşağıdaki biçimde de yazabiliriz. </p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{
    @autoreleasepool {

        int girilen_sayi, toplam;

        do {
            toplam += girilen_sayi;
            NSLog(@"Bir sayi giriniz:");
            scanf("%i", &#038;girilen_sayi);
        } while (girilen_sayi != 0);

        NSLog(@"Toplam: %i", toplam);
    }
    return 0;
}
</pre>
<p><span style="font-size:120%; font-weight:bold;">döngüde "continue" ve "break" kullanımı:</span></p>
<p>Yukarıda sözünü ettiğimiz tüm döngü yapıları içinde gerektiğinde <strong>continue</strong> ve <strong>break</strong> ifadeleri ile herhangi bir şart gerçekleştiğinde döngüden çıkmasını ya da devam etmesini sağlayabiliriz.</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{

    @autoreleasepool {

        for (int i = 0; i < 5; i++) {

            // i'nin değeri 2 olduğunda continue ifadesiyle
            // NSLog çalışmadan döngünün bir sonraki çevrimine geçecek
            if (i == 2) {
                continue;
            }

            NSLog(@"%i", i);
            // sonuç olarak ekranda 0 1 3 4 yazacak. 2 yok
            // çünkü 2 olduğunda continue ile
            // döngüyü bir sonraki çevrime geçirdik.
        }
    }
    return 0;
}
</pre>
<p>Görüldüğü gibi i'nin değeri 2 olduğunda continue ile döngü içindeki diğer satırlar çalışmadan döngüyü bir sonraki iterasyona geçiriyoruz. Bu nedenle de 2 hariç diğer tüm değerler ekrana yazdırılıyor. break ifadesi de yine aynı mantıkla çalışır ama bu ifade döngüyü sonlandırıp program akışını döngünün sonrasındaki satırlara yönlendirir:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{

    @autoreleasepool {

        for (int i = 0; i < 5; i++) {

            // i'nin değeri 2 olduğunda break ifadesiyle
            // döngü sonlandırılıp döngü dışına çıkılacak.
            if (i == 3) {
                break;
            }

            NSLog(@"%i", i);
            // sonuç olarak ekranda 0 1 2 yazacak.
            // çünkü i = 3 olduğunda break ile
            // döngüyü sonlandırıp program akışını
            // döngü dışına çıkarıyoruz.
        }
    }
    return 0;
}
</pre>
<p>Faydalı olması dileğiyle...</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mcoban.com/blog/objective-c-ile-donguler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C İle Koşullu İfadeler</title>
		<link>http://www.mcoban.com/blog/objective-c-ile-kosullu-ifadeler/</link>
		<comments>http://www.mcoban.com/blog/objective-c-ile-kosullu-ifadeler/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 15:07:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[conditional]]></category>
		<category><![CDATA[else]]></category>
		<category><![CDATA[else if]]></category>
		<category><![CDATA[if]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[switch]]></category>

		<guid isPermaLink="false">http://www.mcoban.com/blog/?p=402</guid>
		<description><![CDATA[Objective-C dilinde de diğer tüm dillerde olduğu gibi belli bir koşulun gerçekleşip gerçekleşmediğini kontrol eden ve dönen sonuca göre işlem yapmamızı sağlayan mekanizmalar vardır. if &#8211; else &#8211; else if: En çok kullanılan koşullu ifade türüdür. Aşağıdaki örnekte üç durumu da (if, else if, else) bir arada kullandım: #import &#60;Foundation/Foundation.h&#62; int main (int argc, const [...]]]></description>
			<content:encoded><![CDATA[<p>Objective-C dilinde de diğer tüm dillerde olduğu gibi belli bir koşulun gerçekleşip gerçekleşmediğini kontrol eden ve dönen sonuca göre işlem yapmamızı sağlayan mekanizmalar vardır. </p>
<p><span style="font-size: 120%;"><strong>if &#8211; else &#8211; else if:</strong></span></p>
<p>En çok kullanılan koşullu ifade türüdür. Aşağıdaki örnekte üç durumu da (if, else if, else) bir arada kullandım:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{
    @autoreleasepool {
        int sayi1 = 10;
        int sayi2 = 15;

        // sayi1 sayi2'den buyuk ise
        if (sayi1 > sayi2) {
            NSLog(@"sayi1 sayi2'den buyuktur.");
        }

        // sayi1 sayi2'den kucuk ise
        else if (sayi1 < sayi2) {
            NSLog(@"sayi1 sayi2'den kucuktur.");
        }

        // sayi1 ve sayi2 esit ise.
        else {
            NSLog(@"sayi1 ve sayi2 eşittir.");
        }
    }
    return 0;
}
</pre>
<p>Yukarıdaki örnekte önce sayi1'in sayi2'den büyük olup olmadığı kontrol ediliyor. Eğer bu şart doğrulanırsa -ki örneğimizde doğrulanıyor- <strong>if</strong> ifadesinden sonra gelen küme parantezleri içindeki kodlar çalışıyor. Yani ekrana <strong>"sayi1 sayi2'den buyuktur."</strong> yazılıyor. Bu şart doğrulanamasaydı bir sonraki <strong>if</strong> bloğuna, yani <strong>else if</strong> ile başlayan kod bloğuna geçecekti. Birden fazla koşulu arka arkaya sorgulamak için ilk <strong>if</strong> ifademizden sonra gelen tüm ifadeler <strong>else if</strong> ile devam etmelidir. Sadece <strong>else</strong> kullandığımızda ise derleyiciye, o noktaya kadar sorgulanan koşullardan hiçbiri gerçekleşmez ise bu else bloğundaki kodlar çalışsın demiş oluruz. Yine örneğimize dönecek olursak eğer <strong>sayi1 ve sayi2 birbirine eşit olsaydı else bloğumuz çalışacaktı.</strong> Çünkü bu iki sayıdan biri diğerinden büyük değil ise geriye sadece eşit olma ihtimalleri kalmış demektir.</p>
<p>Koşullu ifadeler aşağıdaki gibi iç içe de kullanılabilir. Örneğimizi değiştiriyoruz ayrıca her değişkene de eşit değer atıyoruz:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{
    @autoreleasepool {
        int sayi1 = 27;
        int sayi2 = 27;

        // sayi1 sayi2'den buyuk ise
        if (sayi1 > sayi2) {
            NSLog(@"sayi1 sayi2'den buyuktur.");
        }

        // sayi1 sayi2'den kucuk ise
        else if (sayi1 < sayi2) {
            NSLog(@"sayi1 sayi2'den kucuktur.");
        }

        // sayi1 ve sayi2 esit ise.
        else {
            NSLog(@"sayi1 ve sayi2 eşittir.");

            // sayinin ikiye bolumunden kalan 0 ise
            if (sayi1 % 2 == 0) {
                NSLog(@"%i çift sayidir", sayi1);
            }

            // sayinin ikiye bolumunden kalan 0 değil ise
            else {
                NSLog(@"%i tek sayidir", sayi1);
            }
        }

    }
    return 0;
}
</pre>
<p>Bu örnekte de <strong>sayi1 ve sayi2 eşit olduğu için else bloğu çalışacak</strong> ve o blokta da yeni bir if - else ile bu sayının tek mi, yoksa çift mi olduğu sorgulanıp sonuç ekrana yazdırılacaktır.</p>
<p>Örneğimiz içindeki <strong>sayi1 % 2 == 0</strong> ifadesinde <strong>% operatörü matematiksel işlemlerde soldaki sayının sağındaki sayıya bölümünden kalan değeri verir.</strong> Burada bir sayının 2'ye bölümünden kalan 0 ise anlarız ki o çift sayıdır, değilse tek sayıdır. </p>
<p>Ayrıca bir if bloğunda birden fazla koşulu aynı anda sorgulayabiliriz. Bu durumda bizim aşağıdaki iki operatörden birine ya da koşula göre her ikisine birden ihtiyacımız olacaktır:<br />
<strong>&#038;&#038; : "ve" operatörü<br />
|| : "veya" operatörü</strong></p>
<p>Örnek kullanımını görelim:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{
    @autoreleasepool {
        int sayi1 = 27;
        int sayi2 = 15;

        // VE (&#038;&#038;) örneği (koşulun her ikisi de sağlanırsa if bloğu çalışır)
        // sayi1 sayi2'den buyuk ise ve(&#038;&#038;) sayi1 çift sayi ise
        if (sayi1 > sayi2 &#038;&#038; sayi1 % 2 == 0) {
            NSLog(@"her iki kosul da saglandi");
        }

        // koşullardan herhangi biri ya da her ikisi de sağlanmazsa
        else {
            NSLog(@"iki kosul ayni anda saglanmadi");
        }

        // VEYA (||) örneği (iki koşuldan herhangi biri sağlanırsa if bloğu çalışır )
        // sayi1 sayi2'den kucuk ise veya(||) sayi1 çift sayi ise
        if (sayi1 < sayi2 || sayi1 % 2 == 0) {
            NSLog(@"iki kosuldan en az biri saglandi");
        }

        // koşulların her ikisi de sağlanmazsa
        else {
            NSLog(@"iki kosuldan hiç biri saglanmadi");
        }

    }
    return 0;
}
</pre>
<p><span style="font-size: 120%;"><strong>switch - case:</strong></span></p>
<p>Diğer bir koşullu ifade türü de <strong>switch - case</strong> yapısıdır. Bu koşullu ifade türü de tıpkı <strong>if - else - else if</strong> mantığına benzer biçimde çalışmaktadır:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{
    @autoreleasepool {
        int girilen_sayi;

        NSLog(@"Lutfen bir sayi giriniz:");
        scanf("%i", &#038;girilen_sayi);

        switch (girilen_sayi % 2) {
            // girilen sayının 2'ye bölümünden kalan 0 ise
            case 0:
                NSLog(@"%i cift sayidir.", girilen_sayi);
                break; // bu kaldırılırsa çift sayı girilse bile alttaki case de sorgulanır.

            // girilen sayının 2'ye bölümünden kalan 0 değil ise
            case !0:
                NSLog(@"%i tek sayidir.", girilen_sayi);
                break;

            default:
                // yukarıdaki sonuçlardan hiç biri gerçekleşmezse
                // buraya yazacağınız kodlar çalışacaktır
                break;
        }
    }
    return 0;
}
</pre>
<p><strong>switch</strong> ifadesinden hemen sonra parantez içindeki koşuldan dönen sonuç <strong>case</strong> ifadesi ile sorgulanıyor ve sonuç doğru ise hemen altındaki satırlar çalışıyor. Değil ise sonraki satırlar kontrol ediliyor. Eğer hiç bir <strong>case</strong> bulunamaz ise <strong>default</strong> ifadesinin altındaki kodlar çalıştırılıyor. <strong>break;</strong> ifadesi sonuç yakalandığında switch'ten çıkması içindir. Eğer break yazılmazsa sonuç yakalanmış olsa bile bir sonraki case de sorgulanır ve hem ilk yakaladığı case, hem de -eğer yakalarsa- diğer case(ler) de çalıştırılır. </p>
<p>Yukarıdaki örnekte <strong>case 0:</strong> altındaki <strong>break</strong> ifadesini kaldırıp, kodu çalıştırdığınızda ve <strong>bir çift sayı girdiğinizde, hem case 0: hem de case !0: 'ın çalıştığını</strong> görebilirsiniz.</p>
<p><span style="font-size: 120%;"><strong>conditional operatörü:</strong></span></p>
<p>Bir koşuldan dönecek olan sonucun sonunda sadece iki işlemden birini yapmak istediğinizde bu operatörü kullanabilirsiniz. Kullanımı pek yaygın olmamakla birlikte benim çok sık ve severek kullandığım bir operatördür. Söz dizimi <strong>koşul ? "true" ise yapılacaklar : "false" ise yapılacaklar</strong> şeklindedir:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{
    @autoreleasepool {
        int girilen_sayi;

        NSLog(@"Lutfen bir sayi giriniz:");
        scanf("%i", &#038;girilen_sayi);

        girilen_sayi > 10 ? NSLog(@"%i, 10'dan buyuktur.", girilen_sayi) : NSLog(@"%i, 10'dan kucuktur.", girilen_sayi);
    }
    return 0;
}
</pre>
<p>Faydalı olması dileğiyle...</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mcoban.com/blog/objective-c-ile-kosullu-ifadeler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C İle Veri Türleri Arasında Dönüşüm Yapmak</title>
		<link>http://www.mcoban.com/blog/objective-c-ile-veri-turleri-arasinda-donusum-yapmak/</link>
		<comments>http://www.mcoban.com/blog/objective-c-ile-veri-turleri-arasinda-donusum-yapmak/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 02:08:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[explicit conversion]]></category>
		<category><![CDATA[NSString]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[type casting]]></category>

		<guid isPermaLink="false">http://www.mcoban.com/blog/?p=393</guid>
		<description><![CDATA[Yazdığımız kodlarda bir değişkene kendisi ile aynı türde olmayan bir değeri atamak durumunda kalabiliriz. İşte böyle bir gereksinim söz konusu olduğunda bilinçli tür dönüşümü (explicit conversion) yapılması gerekir. Dönüştürülmek istenen değerin önüne casting operatörü () konur ve parantezler arasına dönüştürülmek istenen tür yazılır. Bu yöntemle dönüştürme işi, özellikle C ve türevi olan dillerde kullanıcıdan alınacak [...]]]></description>
			<content:encoded><![CDATA[<p>Yazdığımız kodlarda bir değişkene kendisi ile aynı türde olmayan bir değeri atamak durumunda kalabiliriz. İşte böyle bir gereksinim söz konusu olduğunda <strong>bilinçli tür dönüşümü (explicit conversion)</strong> yapılması gerekir. Dönüştürülmek istenen değerin önüne <strong>casting operatörü ()</strong> konur ve parantezler arasına dönüştürülmek istenen tür yazılır. Bu yöntemle dönüştürme işi, özellikle C ve türevi olan dillerde kullanıcıdan alınacak verileri atamak istediğimiz değişken türü ile kullanıcıdan gelen verinin türünün uyumsuz olduğu durumlarda çok yaygın kullanılır. </p>
<p>Aşağıdaki örnekte üç adet <strong>int</strong> türünde değişkenimiz var ve bu değişkenlerin ortalamasını alıyoruz. Ancak ortalaması alınmak istenen değerlerin türü integer olduğu için sonuç ondalıklı bir sayı olsa bile, int türü ondalıklı sayıları barındıramadığından sonuca yansıyacak olan noktadan sonraki haneleri de yok sayacaktır. Ancak bu değerleri bölmeden önce float&#8217;a dönüştürecek (casting) olursak sorun çözülecektir. İşte basit bir örnek:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{
    @autoreleasepool {

        int s1 = 11, s2 = 10, s3 = 17;
        // sayıların toplamını parantez içine aldık ve
        // casting operatörü ile float'a dönüştürüyoruz.
        // sonuç: 38 / 3 = 12.66666666666667 olacaktır.
        NSLog(@"%f", (float)(s1 + s2 + s3) / 3);

        // eğer noktadan sonra sadece 2 hane görmek
        // istersek %.2f ifadesi ile yapabiliriz.
        // sonuç 12.66 olacaktır.
        NSLog(@"%.2f", (float)(s1 + s2 + s3) / 3);
    }
    return 0;
}
</pre>
<p>Ancak type casting yaparken çok dikkat edilmesi gereken bir nokta var. Özellikle float, double, int türleri birbirine dönüştürülürken mesela, bir double türü kendisinden çok daha küçük değer alabilen int türüne dönüştürülmek istendiğinde veri kaybı yaşanabilir <strong>ama bu durumda derleyici asla sizi uyarmaz.</strong> Çünkü yukarıda da bahsettiğim gibi bu tür dönüşümler <strong>explicit conversion</strong>, yani <strong>bilinçli tür dönüşümü</strong> olduğundan bir anlamda derleyici sizin bunun farkında olduğunuzu var sayar ve oluşacak veri kaybını dikkate almadan ve dönüşümü yapar. </p>
<p>Bunun için de bir örnek yapalım. Mesela bir <strong>signed int</strong> değişkenin alabileceği maksimum değer aralığı (32 bit bir uygulama için) −2147483648 ile 2147483647 arasıdır. Bir integer değişkene 2147483647&#8242;den daha büyük bir değere sahip bir double değişkeni casting yaparak atamaya çalıştığımızda bakalım neler oluyor:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{
    @autoreleasepool {

        double s1 = 7463847417.25478951;
        int s2 = (int)s1;

        NSLog(@"%i", s2);
        // sonuç -2147483648 olacaktır.
        // ancak derleme ve çalışma sırasında
        // hata verilmeyecektir.
    }
    return 0;
}
</pre>
<p>Görüldüğü gibi sonuç -2147483648 dönüyor. Dikkat ettiyseniz bir int türünün alabileceği en düşük değeri döndürdü. Eğer double değişkenin değeri aşağıda örnekteki gibi −2147483648 ile 2147483647 arasında olsa idi tür dönüşümü esnasında veri kaybı oluşmayacaktı:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{
    @autoreleasepool {

        double s1 = 254789517;
        int s2 = (int)s1;

        NSLog(@"%i", s2);
        // sonuç 254789517 olacaktır.
        // çünkü bu değer bir int türünün
        // tutabileceği aralıktadır.
    }
    return 0;
}
</pre>
<p><strong>s1</strong>&#8216;in değeri bir int türünün alabileceği aralığı aşmadığından dönüşüm sırasında veri kaybı olmadı ve sonuç 254789517 döndü.</p>
<p>Son olarak çok sık kullanma ihtiyacı duyacağımızı düşündüğüm bir dönüştürme biçimi de bir <strong>string veriyi (NSString) int tipine dönüştürmek</strong>tir. Bunun için aşağıdaki kod bloğunda gördüğünüz <strong>NSString sınıfının intValue metodunu</strong> kullanmanız yeterli:</p>
<pre name="code" class="cpp">
#import &lt;Foundation/Foundation.h&gt;
int main (int argc, const char * argv[])
{
    @autoreleasepool {

        NSString * str = @"254789517";
        int s2 = [str intValue];

        NSLog(@"%i", s2);
    }
    return 0;
}
</pre>
<p>Faydalı olması dileğiyle&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mcoban.com/blog/objective-c-ile-veri-turleri-arasinda-donusum-yapmak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-C Veri Türleri</title>
		<link>http://www.mcoban.com/blog/objective-c-veri-turleri/</link>
		<comments>http://www.mcoban.com/blog/objective-c-veri-turleri/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 14:13:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[datatypes]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://www.mcoban.com/blog/?p=374</guid>
		<description><![CDATA[iOS üzerinde uygulama geliştirmek için doğal olarak Objective-C bilmek gerekiyor. Bu vesile ile bir yandan eğitimden öğrendiklerim, diğer yandan da internet ve kitaplardan derlediğim bilgi ve deneyimlerimi paylaşmak ve öğrendiklerimi pekiştirmek adına blogumda yazmaya çalışacağım. Dilin tarihçesine girmeye niyetim yok. Bu konuda merakı ve ilgisi olanlar şuraya bakabilirler. Objective-C veri türleri C ve türevi olan [...]]]></description>
			<content:encoded><![CDATA[<p>iOS üzerinde uygulama geliştirmek için doğal olarak Objective-C bilmek gerekiyor. Bu vesile ile bir yandan eğitimden öğrendiklerim, diğer yandan da internet ve kitaplardan derlediğim bilgi ve deneyimlerimi paylaşmak ve öğrendiklerimi pekiştirmek adına blogumda yazmaya çalışacağım. Dilin tarihçesine girmeye niyetim yok. Bu konuda merakı ve ilgisi olanlar <a title="tr.wikipedia.org/wiki/Objective-C" href="http://tr.wikipedia.org/wiki/Objective-C" target="_blank">şuraya</a> bakabilirler.</p>
<p>Objective-C veri türleri C ve türevi olan tüm dillerdeki (C, C++, C#) türler ile aynıdır. Sadece bu dile özel olarak &#8220;id&#8221; türü var ki ilerleyen satırlarda kısaca değineceğiz.</p>
<p><span style="font-size: 120%;"><strong>int veri türü:</strong></span></p>
<p>Tam sayı (integer) veri tipidir. 32 bit bir uygulamada işaretsiz (unsigned &#8211; negatif değer almayan) int türünün maksimum aralığı 0 ile 4294967295 arasında olup 64 bit sistemlerde bu aralık 0 ile 18,446,744,073,709,551,615 arasında olacaktır. 32 bit uygulamalar için işaretli (signed &#8211; negatif değer alabilen) int değişkenler −2,147,483,648 ile +2,147,483,647 arasında değer (4 bytes) alabilir. Ancak bu aralık 64 bit uygulamalarda −9,223,372,036,854,775,808 ile +9,223,372,036,854,775,807 (8 bytes) olur. Tanımlama ve değer atama biçimleri aşağıdaki gibidir:</p>
<pre name="code" class="cpp">int main (int argc, const char * argv[])
{
    @autoreleasepool {

        int a = 10;

        // ilk tanımlamadan sonra bir değer atanmaz ise
        // 'int' tipindeki değişkenin değeri varsayılan olarak '0' atanır.
        int b;
        b = 20;

        int c, d, e;
        c = 1;
        d = 2;
        e = 3;

        int f = 15, g = 20;

        // ya da hexadecimal (16'lı sayı sistemi) değer de atanabilir
        int hex_sample = 0xFFA2;
        NSLog(@"%i", hex_sample);
        // ekran çıktısı 65442 olacaktır.
    }
    return 0;
}</pre>
<p><span style="font-size: 120%;"><strong>float veri türü:</strong></span></p>
<p>Noktalı (ondalık) sayı tipidir. Tanımlama ve değer atama biçimleri yine <strong>int</strong>&#8216;de olduğu gibidir. Ancak noktalı, ya da noktasız sayılar alabilir. Bellekte 4 byte (32 bit) yer kaplar:</p>
<pre name="code" class="cpp">int main (int argc, const char * argv[])
{
    @autoreleasepool {

        float a = 10.21;

        // ilk tanımlamadan sonra bir değer atanmaz ise
        // 'float' tipindeki değişkenin değeri varsayılan olarak '0.000000' atanır.
        float b;
        b = 25;

        float c, d, e;
        c = 1.47;
        d = 26.8f;
        e = 3;

        float my_float = 15.896547, g = 20.63f;

        // aşağıdaki ifadedeki .2f 'my_float' değişkeninden gelen değerde
        // noktadan sonraki ilk 2 hanesini almasını sağlar.
        NSLog(@"%.2f", my_float);
        // Ekran çıktısı 15.89 olacaktır.

        // bir değerin 10 üzeri 'x' kuvvetini de alabiliriz.
        float fx = 54.78e4; // 54.78'in 10 üzeri 4 kuvvetini döndürür.
        NSLog(@"%f", fx);
        // Ekran çıktısı 547800.000000 olacaktır.
    }
    return 0;
}</pre>
<p><span style="font-size: 120%;"><strong>double veri türü:</strong></span></p>
<p>Float veri tipinin tutabileceği değerden daha büyük değerleri tutmak için kullanılır. Float veri tipine değer atanırken değerin sonuna &#8216;f&#8217; ifadesi geitirilmediği sürece bu değer bellekte double olarak tutulur. Bellekte 8 byte (64 bit) yer kaplar. float&#8217;ın yaklaşık 2 katı büyüklüğündeki değerleri saklayabilir.</p>
<pre name="code" class="cpp">double my_double_var = 2547896514;
double _var = 0.524122652132234093890324318;</pre>
<p><span style="font-size: 120%;"><strong>char veri türü:</strong></span></p>
<p>Harf, rakam, noktalama işareti veya boşluk karakteri gibi tek bir karakter saklamak için kullanılır. Bellekte 1 byte (8 bit) yer kaplar.</p>
<pre name="code" class="cpp">char chr_letter = 'b';
char chr_digit = '6';
char char_punctuation_mark = ';';</pre>
<p>char veri türünde bazı özel karakterler/kaçış karakterleri (special characters/escape characters) vardır. Bu karakterler ters eğik çizgi &#8220;\&#8221; ile başlar ve derleyici tarafından karakter olarak değil, yapılması gereken bir işlem olarak algılanırlar. Bu özel karakterlerden bazılarının listesi ve işlevleri aşağıdadır:</p>
<p>\n &#8211; Yeni satır<br />
\r &#8211; Satır başı<br />
\t &#8211; Yatay sekme<br />
\v &#8211; Dikey sekme<br />
\\ &#8211; Ters eğik çizgi<br />
\&#8221; &#8211; Çift tırnak (bir string veri içinde çift tırnak işareti bu şekilde kullanılmak zorundadır)</p>
<p>Örnekler:</p>
<pre name="code" class="cpp">int main (int argc, const char * argv[])
{
    @autoreleasepool {

        NSLog(@"\nbu ilk satır\nbu da 2. satır ve bu satırda ters eğik çizgi (\\) kullandım.");
        // çıktısı aşağıdaki gibi olur:
        /*
         bu ilk satır
         bu da 2. satır ve bu satırda ters eğik çizgi (\) kullandım.
         */

        NSLog(@"\rilk kelime.\t\t2 kere tab yapıldıktan sonrası. ve bu satırda çift tırnak (\") kullandım.");
        // çıktısı aşağıdaki gibi olur:
        // ilk kelime.		2 kere tab yapıldıktan sonrası. ve bu satırda çift tırnak (") kullandım. (aradaki boşluğa dikkat)
    }
    return 0;
}</pre>
<p><span style="font-size: 120%;"><strong>bool veri türü:</strong></span></p>
<p>&#8220;0&#8243; veya &#8220;1&#8243;, &#8220;true&#8221; veya &#8220;false&#8221;, &#8220;YES&#8221; veya &#8220;NO&#8221; değerlerinden birini alabilen bir türdür. Genellikle bir koşuldan dönen sonucu tutmak için kullanılır. Aşağıdaki biçimlerde tanımlanabilir:</p>
<pre name="code" class="cpp">int main (int argc, const char * argv[])
{
    @autoreleasepool {

        bool b1 = NO;
        Boolean b2 = 1;
        _Bool b3 = true;
        BOOL b4 = 0;

        NSLog(@"%i, %i, %i, %i", b1, b2, b3, b4);
        // ekran çıktısı 0, 1, 1, 0 olur.
    }
    return 0;
}</pre>
<p><span style="font-size: 120%;"><strong>id veri türü:</strong></span></p>
<p>Tipi ne olursa olsun, herhangi bir nesnenin referansını tutmak için kullanılabilecek genel amaçlı (generic) bir veri türüdür.</p>
<p><span style="font-size: 140%;"><strong>Objective-C veri türü niteleyicileri:</strong></span></p>
<p><span style="font-size: 120%;"><strong>long:</strong></span></p>
<p>Bir veri türünün değer aralığını genişletmek için kullanılır. int ve double türleri için kullanılabilir.</p>
<pre name="code" class="cpp">long int large_int;
long double large_double;</pre>
<p><span style="font-size: 120%;"><strong>long long:</strong></span></p>
<p>Bir long veri türünü &#8220;extra&#8221; long yapmak için kullanılır.</p>
<pre name="code" class="cpp">long long int extra_large_int;</pre>
<p><span style="font-size: 120%;"><strong>short:</strong></span></p>
<p>Bir int veri türünü 32 bit&#8217;den 16 bit&#8217;e düşürerek alabileceği değer aralığını −32,768 ile +32,767 arasında sınırlar.</p>
<pre name="code" class="cpp">short int small_int;</pre>
<p><span style="font-size: 120%;"><strong>signed &amp; unsigned:</strong></span></p>
<p>int veri tipi tanımlandığında varsayılan olarak işaretli (signed) &#8216;dir. Dolayısıyla negatif değer de alabilir. Ancak unsigned olarak tanımlandığında artık negatif değer alamaz ve değer aralığı −2,147,483,648 ile +2,147,483,647 iken, 0 ile +4,294,967,295 arasında olur ve sadece pozitif değer alabilir hale gelir.</p>
<pre name="code" class="cpp">
unsigned int uns_int;
// niteleyiciler bu örnekte olduğu gibi
// kombine olarak da kullanılabilirler.
unsigned short int uns_small_int = 10;
</pre>
<p>Ayrıca bir int ile unsigned, signed, short ve long kullanımında int ifadesini kullanmadan da tanımlama yapılabilir. Aşağıdaki tanımlama biçimleri geçerlidir:</p>
<pre name="code" class="cpp">unsigned val1;
signed val2;
short val3;
long val4;</pre>
<p>Aşağıda veri türlerini tablo halinde görebilirsiniz.</p>
<table style="border-collapse:collapse; width:100%;">
<tbody>
<tr>
<th colspan="4" style="border:1px solid #ddd; padding:5px;">Standart Türler</th>
</tr>
<tr>
<th style="border:1px solid #ddd; padding:5px;">Tür</th>
<th style="border:1px solid #ddd; padding:5px;">Açıklama</th>
<th style="border:1px solid #ddd; padding:5px;">Boyut</th>
</tr>
<tr>
<td style="border:1px solid #ddd; padding:5px;">int</td>
<td style="border:1px solid #ddd; padding:5px;">32 bit tam sayı</td>
<td style="border:1px solid #ddd; padding:5px;">4 bytes (32 bit)</td>
</tr>
<tr>
<td style="border:1px solid #ddd; padding:5px;">float</td>
<td style="border:1px solid #ddd; padding:5px;">kayan noktalı (ondalık) sayı</td>
<td style="border:1px solid #ddd; padding:5px;">4 bytes (32 bit)</td>
</tr>
<tr>
<td style="border:1px solid #ddd; padding:5px;">char</td>
<td style="border:1px solid #ddd; padding:5px;">karakter</td>
<td style="border:1px solid #ddd; padding:5px;">1 byte (8 bit)</td>
</tr>
</tbody>
</table>
<hr style="visibility:hidden;" />
<table style="border-collapse:collapse; width:100%;">
<tbody>
<tr>
<th colspan="3" style="border:1px solid #ddd; padding:5px;">Türemiş Tipler</th>
</tr>
<tr>
<th style="border:1px solid #ddd; padding:5px;">Tür</th>
<th style="border:1px solid #ddd; padding:5px;">Açıklama</th>
<th style="border:1px solid #ddd; padding:5px;">Boyut</th>
</tr>
<tr>
<td style="border:1px solid #ddd; padding:5px;">short</td>
<td style="border:1px solid #ddd; padding:5px;">16 bit tam sayı</td>
<td style="border:1px solid #ddd; padding:5px;">2 bytes (16 bit)</td>
</tr>
<tr>
<td style="border:1px solid #ddd; padding:5px;">long</td>
<td style="border:1px solid #ddd; padding:5px;">double short</td>
<td style="border:1px solid #ddd; padding:5px;">4 bytes (32 bit)</td>
</tr>
<tr>
<td style="border:1px solid #ddd; padding:5px;">long long</td>
<td style="border:1px solid #ddd; padding:5px;">double long</td>
<td style="border:1px solid #ddd; padding:5px;">1 byte (8 bit)</td>
</tr>
<tr>
<td style="border:1px solid #ddd; padding:5px;">double</td>
<td style="border:1px solid #ddd; padding:5px;">çift tam float</td>
<td style="border:1px solid #ddd; padding:5px;">1 byte (8 bit)</td>
</tr>
</tbody>
</table>
<hr style="visibility:hidden;" />
<table style="border-collapse:collapse; width:100%;">
<tbody>
<tr>
<th colspan="3" style="border:1px solid #ddd; padding:5px;">Objective-C&#8217;ye Özel Veri Türleri</th>
</tr>
<tr>
<th style="border:1px solid #ddd; padding:5px;">Tür</th>
<th style="border:1px solid #ddd; padding:5px;">Açıklama</th>
<th style="border:1px solid #ddd; padding:5px;">Boyut</th>
</tr>
<tr>
<td style="border:1px solid #ddd; padding:5px;">id</td>
<td style="border:1px solid #ddd; padding:5px;">nesne</td>
<td style="border:1px solid #ddd; padding:5px;">4 bytes (32 bit)</td>
</tr>
</tbody>
</table>
<hr style="visibility:hidden;" />
Umarım bir eksik ya da hatam yoktur. Yararlı olması dileğiyle&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mcoban.com/blog/objective-c-veri-turleri/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ASP.NET DetailsView İçindeki Bir Kontrole Erişmek</title>
		<link>http://www.mcoban.com/blog/asp-net-detailsview-icindeki-bir-kontrole-erismek/</link>
		<comments>http://www.mcoban.com/blog/asp-net-detailsview-icindeki-bir-kontrole-erismek/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 07:26:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[detailsview]]></category>

		<guid isPermaLink="false">http://www.mcoban.com/blog/?p=387</guid>
		<description><![CDATA[ASP.NET ile hazırladığımız web tabanlı uygulamalarda en çok kullandığımız yapı Master-Detail yapısıdır. Yani bir GridView içinde veri tabanından gelen veriler satır ve sütunlar biçiminde sıralanır ve seçtiğimiz satırın detayları DetailsView içinde görüntülenir. Buraya kadar bir problem yok. Ancak DetailsView içinde görüntülenen kaydın üzerinde EditMode&#8216;da iken değişiklik yapmak ya da InsertMode&#8216;da yeni veri girmek gerektiğinde DetailsView [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mcoban.com/blog/wp-content/uploads/master-detail.png"><img src="http://www.mcoban.com/blog/wp-content/uploads/master-detail-150x150.png" alt="" title="asp.net master-detail kullanımı" width="150" height="150" class="alignleft size-thumbnail wp-image-392" /></a>ASP.NET ile hazırladığımız web tabanlı uygulamalarda en çok kullandığımız yapı <a href="http://msdn.microsoft.com/en-us/library/bb331182.aspx" title="Master - Detail" target="_blank">Master-Detail</a> yapısıdır. Yani bir <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.aspx" title="GridView" target="_blank">GridView</a> içinde veri tabanından gelen veriler satır ve sütunlar biçiminde sıralanır ve seçtiğimiz satırın detayları <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.aspx" title="DetailsView" target="_blank">DetailsView</a> içinde görüntülenir. Buraya kadar bir problem yok. Ancak DetailsView içinde görüntülenen kaydın üzerinde <strong>EditMode</strong>&#8216;da iken değişiklik yapmak ya da <strong>InsertMode</strong>&#8216;da yeni veri girmek gerektiğinde DetailsView içinde yer alan bir kontrole erişme noktasında bazı sıkıntılarla karşılaşabiliriz ki, özellikle <a href="http://www.asp.net/web-forms" title="ASP.NET Web Form" target="_blank">ASP.NET Web Form</a> ile yeni çalışmaya başlayanlar genelde kontrollerin olaylarını <strong>(events)</strong> tam olarak kavrayana kadar ciddi sıkıntı yaşarlar. Ancak DetailsView içindeki bir kontrole erişmek aslında oldukça kolaydır.</p>
<p>Aşağıdaki kod örneğinde de görüldüğü gibi bir DetailsView kontrolünün <strong>DataBound</strong> olayında önce DetailsView kontrolünün modu sorgulanıp <strong>(CurrentMode)</strong> arkasından erişmek istediğimiz kontrole ID&#8217;si ile DetailsView sınıfının <strong>FindControl</strong> metoduyla erişebiliriz. Elbette aradığımız kontrolün tipine <a href="http://msdn.microsoft.com/en-US/library/ms173105%28v=VS.100%29.aspx" title="cast" target="_blank">cast</a> etmeyi unutmadan&#8230;</p>
<pre name="code" class="c-sharp">
protected void DetailsView1_DataBound(object sender, EventArgs e)
{
    // Düzenleme (Edit) modunda iken erişim
    if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
    {
        // YourControlType: DropDwonList, ListBox, TextBox vb.
        var control = (YourControlType)DetailsView1.FindControl("YourControlID");
    }

    // Okuma (ReadOnly) modunda iken erişim
    else if (DetailsView1.CurrentMode == DetailsViewMode.ReadOnly)
    {
        var control = (YourControlType)DetailsView1.FindControl("YourControlID");
    }

    // Yeni veri girme (Insert) modunda iken erişim
    else if (DetailsView1.CurrentMode == DetailsViewMode.Insert)
    {
        var control = (YourControlType)DetailsView1.FindControl("YourControlID");
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.mcoban.com/blog/asp-net-detailsview-icindeki-bir-kontrole-erismek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

