September 09, 2009

Emre örnekleri denediğinden emin misin ? Çünkü bende hata verdi. Sanırım D Diğer dillerdeki gibi kullanılmıyor foreach(Java, php gibi). Foreach benden uzak kalsın gibi düşünüyorum şuan. For bana yeter. Biraz derleyici çalışacağına ben çalışayım :-D

Acaba cast yerine to şablonu kullanılamaz mı ? Ne farkı varda kütüphanede bile cast kullanılmış.

Alıntı (acehreli):

>

[Öncelikle not: Ben her sorunun kendi küçük konusu olmasından yanayım. Çünkü bu forumlara ileride de insanlar gelecek ve arayarak buldukları konular içinde, işlerine yarayanı başlığından tanıyacaklar.]

Olabilir ama çok fazla konu açılacağı için istememiştim. Şuan anlamadıklarımın konularını açayım mı ? Çünkü konu hakkında bir şey bilmeyenlere göre çok üstünden geçmişsiniz.

Hepinize cevaplarınız için teşekkür ederim.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 09, 2009

Alıntı (canalpay):

>

Emre örnekleri denediğinden emin misin ? Çünkü bende hata verdi. Sanırım D Diğer dillerdeki gibi kullanılmıyor foreach(Java, php gibi). Foreach benden uzak kalsın gibi düşünüyorum şuan. For bana yeter. Biraz derleyici çalışacağına ben çalışayım :-D

Ben biraz önce aynen burdaki yazdıklarımı kopyalayıp denedim çalışıyor. Ama mesajı yolladıktan biraz sonra bazı hatalar fark edip düzenleme yapmıştım belki sen düzenlemeden önce alıp denedin. Şimdiki halleriyle üç örneğim de çalışıyor tekrar dener misin?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 09, 2009

Şuan çalışıyor bende de hata olmuş olabilir.
Alıntı (emre413):

>

Yani bir string'in içinde kaç tane istediğin bir harfin geçtiğini bulabilirsin.

Hazı fonsiyonlar varken neden bununla uğraşalım :-) .
Ama hala o foreach döngüsünü merak etmiyor değilim.

Ve buldum. Biraz tembel olmasam harikalar yatacağım :-D O basit şey indisi veriyormuş. Tabiki indis sıfırdan başladığı için sıfırdan başlayarak.

Bir sorum daha var. Acaba anahtara 0 yazıp ilk elemanı bulmak yerine başka bir anahtar sözcük kullanabilir miyiz ? Sanki bir yerde görmüştüm ama bu gün tembelliğim üstünde :-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 09, 2009

yok yani ben örnek olsun diye dedim. Ali hocam sana demişti ya senin fonksiyon 3 kere dolanıyor diye işte bu döngüyle string'in içindeki karakterleri bir kere kontrol edersin. Örnek bir şey yazayım:

wstring toupperT(wstring giriş)
{
   wchar büyükHarf;
   wchar[] çıkış;
   foreach(wchar küçükHarf; giriş) {
       if(küçükHarf == 'i')
           büyükHarf = 'İ';
       else if(küçükHarf == 'ı')
           büyükHarf = 'I';
       else if(küçükHarf == 'ğ')
           büyükHarf = 'Ğ';
       else
           büyükHarf = küçükHarf - ('a' - 'A');
       çıkış ~= büyükHarf;
   }
   return çıkış.idup;
}

Ben burda hep wstring, wchar gibi şeyler kullandım yoksa ı, İ gibi şeyleri kabul etmiyor.
Not: 'a' - 'A' ile karakter tablosundaki a ile A karakterleri arasındaki farkı buluyoruz bu 32'ye (A = 65, a = 97) eşit ama ben ne olur ne olmaz diye böyle yazdım. Tabi bu fonksiyon bir örnek yoksa normal toupper fonksiyonu bir şeyleri kontrol ediyor galiba ben hiç bir şey yapmadan direkt küçük harflerden oluşan cümle girildiğini farzettim.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 09, 2009

açıkcası ben de anlamadım o başka bir soru mu acaba? Yani foreach ile bi alakası var mı?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 09, 2009

Ben şimdi türkçe diye bir dizi tanımladım.

dchar[]  alfabe=("a","b","c","ç");

Bu dizideki a harfine alfabe[0] diyerek ulaşıyorum. Ama ben buna alfabe["ilkHarf"] diyerek ulaşmak istiyorum. Bu durumda ne yapmam gerekiyor ?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 09, 2009

Alıntı:

>

Bu dizideki a harfine alfabe[0] diyerek ulaşıyorum. Ama ben buna alfabe["ilkHarf"] diyerek ulaşmak istiyorum. Bu durumda ne yapmam gerekiyor ?

PHP de sıkça kullanılan bir yöntem. Anahtar=>Değer ilişkisi olarak geçer genelde.

import std.stdio;
import std.string;

int main()
{
   /*Anahtarlarımızın(indexlerin) dizgi olmasını istediğimiz için
   Diziyi bu şekilde tanımladık. Diziyi şöylede tanımlaya bilirdik: char[char[]] dizi
   Bu şekilde tanımlarsak foreach döngüsünüde biraz değiştirmemiz gerekir*/
   char[string] dizi;
   dizi["ilkHarf"] = 'a';
   dizi["ikinciHarf"] = 'b';
   dizi["üçüncüHarf"] = 'c';

   //Burda sıralama önemli.İlk önce anahtar değer(index)
   //Daha sonra o dizi elamanının değerini tutacak değişken
   foreach(string anahtar,char değer;dizi)
       writeln(anahtar,":",değer);

   //Diziyi char[char[]] dizi şeklinde tanımlarsak kullanılması gereken döngü
//    foreach(const(char)[] anahtar,char değer;dizi)
//        writeln(anahtar,":",değer);

   return 0;
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 09, 2009

alfabe["ilkHarf"] olarak değil ama alfabe[Harfler.İLK] diyerek ulaşabilirsin. esatarslan52 örnek vermişti ya enum'a işte burda işe yarayabilir.

   enum Harfler
   {
       İLK,İKİNCİ,ÜÇÜNCÜ,DÖRDÜNCÜ,BEŞİNCİ,ALTINCI,YEDİNCİ,SEKİZİNCİ,DOKUZUNCU,
       ONUNCU,ONBİRİNCİ,ONİKİNCİ, /*Böyle devam edecek istediğin bir sayıya kadar.
       İLK otomatik olarak 0 oluyormuş. Sonuncunun sonuna virgül ya da noktalı virgül gelmeyecek,
       yani boş olacak*/
   }
   dchar[] alfabe = ['a','b','c','ç','d',/*........*/'z'];
   writeln(alfabe[Harfler.İLK]);

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 09, 2009

[Öncelikle not: Ben her sorunun kendi küçük konusu olmasından yanayım. Çünkü bu forumlara ileride de insanlar gelecek ve arayarak buldukları konular içinde, işlerine yarayanı başlığından tanıyacaklar.]

Derleyici, 'ı='ı'' diye tanımlanan değişkenin, kullanıldığı ortam içinde hiç değiştirilmediğini görürse, sanki hiç tanımlanmamış ve her yerde sabit olarak ''ı'' yazılmış gibi derler. Bunlar derleyicilerin sıradan işlerindendir; hem programcılar bu konuları derleyici kadar iyi bilemezler, hem de daha üst düzey kavramlarla düşünmeleri daha yararlıdır.

Evet, sanki C bilgisi yararlı olacak gibi geliyor... Öğrenilen bazı şeyleri sonradan unutmak gerekir; örneğin C'deki fonksiyondan hata döndürmek yerine, D'de hata atmak (throw exception)...

Evet, invariant'ın yerine artık immutable kullanılacak; ama invariant da hâlâ destekleniyor. Bir başka deyişle, "invariant deprecated" oldu; yani ileride bir zamanda desteklenmeyebilir.

std.date içinde kodun harcadığı süreyi ölçen benchmark diye bir şablon varmış:

import std.stdio;
import std.date;

void main()
{
   writeln("birinci: ", benchmark!(birinci_yöntem)(10_000_000));
   writeln("birinci: ", benchmark!(ikinci_yöntem)(10_000_000));
}

int birinci_yöntem()
{
   int a = 42;
   a %= 7;
   return a;
}

int ikinci_yöntem()
{
   int a = 42;
   int bölüm = a / 7;
   int kalan = a - bölüm * 7;
   return kalan;
}

Geri kalan soruların cevapları çok uzun olabilir. Bence bunları Ders Arası bölümüne ayrı ayrı yazarsak, herkes küçük örneklerle anlatır. D.ershane de yavaş yavaş daha ayrıntılısını...

enum: Değerlerinin isimleri olan bir tamsayılar kümesi tanımlar (C'deki kavramla aynı, ama yazımı farklı)

version: Bulunulan ortam ve programın kendi sürümüne göre davranmasına yardım ediyor

size_t: C'deki gibi, o ortamın büyüklük ifade etmeye uygun türü. Örneğin dosya uzunluğu için 'ulong''un eşdeğeri olabilir

cast: Otomatik olarak dönüşemeyecek yerde zorla tür dönüştürmek (C'de ve C++'da da olan bir kavram)

new: Nesne hayata geçiriyor (C++ ile aynı)

in, out, body: Sözleşmeli programlama (contract programming) fonksiyona girildiğinde (in) ve çıkıldığında (out) çalıştırılacak kodları (assert'leri) barındırıyor. O durumda body de fonksiyonun asıl kodları oluyor.

throw: hata (exception) atıyor (C++ ile aynı)

foreach: for döngüsünün daha raconlu olanı :) (C++'da başlığında for_each olarak var; ama D'ninki yapılacak işi yani isimsiz fonksiyon olarak da alabiliyor)

scope: Normalde yaşamları çöp toplayıcı tarafından sonlandırılan nesneyi hemen bu kapsamdan çıkılırken sonlandırıyor (C++'da her nesne böyledir)

Gerisini bilmiyorum. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 09, 2009

Evet, in ve out'un esatarslan52'nin gösterdiği anlamları da var. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]