Forum: D Programlama Dili RSS
D ile ilgili sorular
Sayfa:  önceki  1  2  3  sonraki 
canalpay (Moderatör) #16
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 615
Bu arada neyin daha hızlı olduğunu nreden bileceğiz. Mesala pythonda ben ikisin aynı anda çalştırmayı deneyek ölçmüştüm. Python da birden atıyorum on bine kadar sayan while kod parçacığı for'da aynı işi yapana göre çok daha hızlıydı.

Sorular:


1.enum ne işe yarıyor ?

2. version ne işe yarıyor ? (Tahminim versiyonun içine işletim sistemi adını yazıyorsun o da sana program o işletim sistemnde çalıştıysa true çalışmadıysa false dönürüyor.)

3.debug ne işe yarıyor.

3. size_t ne demek oluyor.( Tahminim bir şeyin büyüklüğünü tutarken yardımcı oluyor. Ama o zaman neden real türünü kullanmıyoruz ?)

4.cast ne işe yarıyor ?

5.copy = new char[s.length + 1]; bu ne işe yarıyor. (Yoksa copy değişkenini tanımlıyken bir daha tanımlamak için başına new mi yazmak gerekiyor? )

6. in, out, body bunlar ne işe yarıyor ?

7.cast ne işe yarıyor?

8.throw ne işe yarıyor?

9.deprecated ne işe yarıyor ?

10. pragma ne işe yarıyor?

11. foreach (size_t i, dchar c; s) bunun ne demek olduğunu çözemedim. Yani bu neye yarıyor. (kısaca foreach döngüsünü soruyorum.)

12. scope ne işe yarıyor ?


Evet şimdilik bu kadar :-D Fazla mı abarttım ?
erdem (Moderatör) #17
Üye Tem 2009 tarihinden beri · 981 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
3.debug ne işe yarıyor.

Hata yakalamak demek. Programları oluştururken iki yöntemle release ve debug modunda oluşturuyoruz. Debug modunda, oluşan hata ile ilgili daha fazla bilgi programa geçiyor. Release modunda ise önemli olan hız.  Debug modunda yeterince test edilen program, release modunda üretiliyor ve kullanılmaya hazır hale geliyor.

canalpay:
3. size_t ne demek oluyor.( Tahminim bir şeyin büyüklüğünü tutarken yardımcı oluyor. Ama o zaman neden real türünü kullanmıyoruz ?)

İşaretsiz tamsayı veri tipi için kullanılan bir takma isim. Örneğin dizi indislerini tuttuğunu varsayılım. Bunlar 0'dan başlayıp pozitif olduğu ve tamsayı olduğu için size_t kullanabilirsin.
emre413 (Moderatör) #18
Kullanıcı başlığı: Celal Emre ÇİÇEK
Üye Tem 2009 tarihinden beri · 62 mesaj · Konum: Kırıkkale
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
4.cast ne işe yarıyor ?

Galiba türler arası dönüşümlerde kullanılıyor. Örn:
int sayı = 7;
double sayı2 = cast(double)sayı;
writeln(sayı, " ", sayı2);

canalpay:
8.throw ne işe yarıyor?

O da hata fırlatıyordu herhalde?

canalpay:
foreach (size_t i, dchar c; s) bunun ne demek olduğunu çözemedim. Yani bu neye yarıyor. (kısaca foreach döngüsünü soruyorum.)

Buradaki foreach'in amacını anlayamadım ama foreach bir dizideki elemanları tek tek dolanan bir döngüdür. Ona da örnek vereyim (tabi yanlış değilse yanlışsa da acehreli belirtir nasıl olsa güvenlik var yani :)):
int[] dizi = [1,2,3,4,5,6,7,8];
foreach(int sayı; dizi) {
    writeln(sayı);
}

Ayrıca foreach sana toupperT konusunda da yardımcı olabilir. Yani karakter düzeyine inersen.
emre413 (Moderatör) #19
Kullanıcı başlığı: Celal Emre ÇİÇEK
Üye Tem 2009 tarihinden beri · 62 mesaj · Konum: Kırıkkale
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
foreach'a başka bir örnek:

    string mesaj = "Selam Ben Emre";
    int sayı;
    foreach(char e; mesaj) {
        if(e == 'e' || e == 'E') {
            sayı++;
        }
    }
    writeln("\"", mesaj, "\" Cümlesi içinde ", sayı, " tane 'e' veya 'E' harfi var");

Yani bir string'in içinde kaç tane istediğin bir harfin geçtiğini bulabilirsin.
Avatar
esatarslan52 (Moderatör) #20
Üye Haz 2009 tarihinden beri · 142 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #16
6. in, out, body bunlar ne işe yarıyor ?

in ve out üzerinde daha önce tartışmıştık. BUradan ulaşabilirsin.

1.enum ne işe yarıyor ?

Enum (Enumerators) kendi küme tiplerimizi oluşturmamıza yarıyor. Numaraları isimlendirerek kullanımı kolaylaştırır.
enum kümeİsmi
{
değişken1,
değişken2,
değişken3,
}
Aksi belirtilmediği sürece ilk değişken sıfıra karşılık gelir ve artarak devam eder. Ama istersek kendi numaralarımızı kendimizde verebiliriz.

enum kümeİsmi
{
değişken1=10,
değişken2=5,
değişken3=8,
}

Ufak bir örnek:
import std.stdio;
 
enum Renk
{
    SİYAH,
    BEYAZ,
    MAVİ,
    KIRMIZI,
}
 
void ekranRenk(Renk pRenk)
{
    switch(pRenk)
    {
        case Renk.SİYAH: writeln("Ekranı Siyah yap");break;
        case Renk.BEYAZ: writeln("Ekranı Beyaz yap");break;
        case Renk.MAVİ: writeln("Ekranı MAVİ yap");break;
        case Renk.KIRMIZI: writeln("Ekranı KIRMIZI yap");break;
    }
}
 
int main()
{
    ekranRenk(Renk.MAVİ);
    
    return 0;
}
acehreli (Moderatör) #21
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #19
[Ö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 <algorithm> 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
acehreli (Moderatör) #22
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Evet, in ve out'un esatarslan52'nin gösterdiği anlamları da var. :)

Ali
canalpay (Moderatör) #23
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #20
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ış.

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.
acehreli (Moderatör) #24
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bence küçük konular daha iyi. Ama bazı konular kitaplarda kendi bölümleri olacak kadar uzun olabilir. :)

Şu işler rayına girse de, D.ershane'ye aynı hızla dönsem diye bekliyorum. :)

Ali
emre413 (Moderatör) #25
Kullanıcı başlığı: Celal Emre ÇİÇEK
Üye Tem 2009 tarihinden beri · 62 mesaj · Konum: Kırıkkale
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #23
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?
canalpay (Moderatör) #26
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Şuan çalışıyor bende de hata olmuş olabilir.
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 :-)
emre413 (Moderatör) #27
Kullanıcı başlığı: Celal Emre ÇİÇEK
Üye Tem 2009 tarihinden beri · 62 mesaj · Konum: Kırıkkale
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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 mesaj emre413 tarafından değiştirildi; zaman: 2009-09-09, 15:05.
acehreli (Moderatör) #28
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #26
Ben son 0'lı soruyu anlamadım... :(

Ali
emre413 (Moderatör) #29
Kullanıcı başlığı: Celal Emre ÇİÇEK
Üye Tem 2009 tarihinden beri · 62 mesaj · Konum: Kırıkkale
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
açıkcası ben de anlamadım o başka bir soru mu acaba? Yani foreach ile bi alakası var mı?
canalpay (Moderatör) #30
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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 ?
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  önceki  1  2  3  sonraki 
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 13:06:37 (UTC -08:00)