Pages: 1 2 3 4 5 6 7 8 9 10 11 ... 44 >>

19/02/12

29/01/12

Permalink 11:24:00, by burku Email , 9 words   utf-8
Categories: çizim

Küçük ejder ağaç dalında (Little dragon on branch)

Siyah tükenmez kalemle dala konmuş bir küçük ejder :yes:

Permalink 11:12:00, by burku Email , 8 words   utf-8
Categories: çizim

Ejderha Kavgası ( Dragon Fight )

Önce kurşun, sonra tükenmez kalemle ilkokul resim defterine...:)

Permalink 11:09:00, by burku Email , 28 words   utf-8
Categories: çizim

Year of the dragon

Çin takvimine göre ejderha yılına girmiş bulunuyoruz. Bu yıl bol bol ejderha çizmeye ve boyama konusundaki çaylaklığımı gidermeye niyetliyim. Suluboyayla başlıyorum.

Here is my first watercolor ugly dragon :)

12/01/12

Permalink 22:19:00, by ertan Email , 428 words   utf-8
Categories: Algoritma Soruları

Invariant Case Türkçe İ ve I karakterleri

Çok eski bir konu ama halen bu konuda hatalı kodlarla karşılaştığım için anlatayım. .Net Framework 2.0 versiyonu ile string karşılaştırmalarda yeni bir özellik geldi.

Back To Basics

Geçmiş ile işim olmaz diyenler bu bölümü atlayabilir, meraklılar için önce biraz zamanda geri saralım.

Bundan 15 yıl öncesinde DOS tipi işletim sistemleri kullanılırken dillerdeki farklı karakterleri göstermek için ISO 8859 adında bir standart kullanılmaya başlandı. O tarihlerde bilgisayarlar daktilo niyetine kullanıldığı için temel olarak ingilizce'yi alan bu standart farklı diller içinde 255 karakter içerisinden sık kullanılmayan karakterlerin şekilleri ve karakterlerin sıralaması değiştirilerek çözüldü.

Örneğin; Türkçe için Ş,İ,Ö,Ç gibi karakterlere değiştirerek Latin-5 (Tam ismiyle ISO-8859-9) isimli ISO standardı uyduruldu.

Eğer farklı bir dil setini kullanıyorsanız "I" harfi ile "ı" (yada ekranda göreceğiniz şekliyle "Y" benzeri bir şey) aynı anlamda değildi.

O zamanları hatırlayınca Türkçe karakter problemleri şimdi yaşananlar bunca karmaşaya rağmen çok hafif kalır aslında ama neyse.

1990'ların sonuna doğru tüm bu sorunları ortadan kaldırmak için Unicode adı verilen yeni bir standart yayılmaya başladı ama ancak şimdilerde yaygın olarak kullanılmaya başladı. .Net'in ilk yayınladığı 1.0 versiyonunda da varsayılan olarak Unicode kullanılması belki de tüm bunlara bir katkısı olmuştur.

Problem nerde ?

Framework 1.0'daki tüm string işlemlerinin kullanılan dilin özelliklerine göre çalışması bir sürü karakter sorunlarını çözdü ama bu sefer farklı bir problem yarattı.

Örneğin; Diskinizdeki C:\Inceden.txt isimli bir dosyayı açmak niyetiyle aşağıdaki gibi bir iş yaparsanız

Code:

string dosya = "C:\Inceden.txt";
 
File.Open( dosya.ToLower() );

Dosyanın adı "c:\ınceden.txt" gibi bir şeye dönüşüyor, normal olarakta dosyayı bulamıyordunuz.

Aslında bu normal çünkü Türkçe size "I" harfinin küçülmüş halinin "ı" olduğunu söyler.

Bu sefer karşılaştırma işlemlerinde üzerinde işlem yapmak istediğiniz şeyin ne olduğu bu sefer değişmeye başladı. Bu bir kişinin adı mı ?, yoksa dosya adı mı ? gibi.

1.1 versiyonuna kadar devam eden problem benimde katkımla yoğun şikayetler yüzünden framework'deki string işlemlerine Invariant ve Ordinal isimli yeni karşılaştırma tipleri eklenerek çözüldü. Bu konuyla ile ilgili daha fazla detayı buradan öğrenebilirsiniz.

Nasıl ?

Eğer kullanılan dilden bağımsız hareket etmek istiyorsanız Invariant, dil ile ilgisiz tam eşleşme istiyorsanız Ordinal kullanılması gibi bir çözüm çıktı.

Örnekle gidelim;

Biraz önceki dosya adını invariant kullanarak küçük harflere çevirirsek;

Code:

? "Inceden.TXT".ToLowerInvariant()
"inceden.txt"

Örneğin Invariant karşılaştırırsak;

Code:

? string.Equals("i","I", StringComparison.InvariantCultureIgnoreCase)
true
? string.Equals("ş","S", StringComparison.InvariantCultureIgnoreCase)
false
? string.Equals("ş","Ş", StringComparison.InvariantCultureIgnoreCase)
true

benzeri ordinal karşılaştırma yaparsak;

Code:

? string.Equals("i","İ", StringComparison.OrdinalIgnoreCase)
false
? string.Equals("I","İ", StringComparison.OrdinalIgnoreCase)
false
? string.Equals("i","I", StringComparison.OrdinalIgnoreCase)
true

ordinalin farklı davrandığı bir örnek olarak

Code:

? string.Equals("a","A", StringComparison.OrdinalIgnoreCase)
true

İşin özeti

Herhangi bir string karşılaştırma yapacaksanız, string içindeki değerin ne olduğunu bilerek davranmanız ilerde daha az ağrısız bir ortam yaratır size.

Size tavsiyem hiç bu özellikleri kullanmadan asla ama asla myString1 == myString2 şeklinde bir karşılaştırma yapmayın. Bu tür karşılaştırmalar işletim sisteminin seçtiği dilin özelliklerine göre çalışır, eğer yazdığınız uygulama birden fazla dil desteği sağlıyorsa uzak durun derim.

1 2 3 4 5 6 7 8 9 10 11 ... 44 >>

May 2012
Mon Tue Wed Thu Fri Sat Sun
 << <   > >>
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
This blog contains all user blogs in rdg network

Search

XML Feeds

blog soft