Forum: D Programlama Dili RSS
Her Türü Kapsayan Tür
canalpay (Moderatör) #1
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ı
Konu adı: Her Türü Kapsayan Tür
C#'ta sanırım object diye bir genel tür vardı ve diğer türler bu türlerden elde edilmişti. D dilinde de böyle bir genel tür var mı. Yoksa eğer giriş işleminde int girişi beklerken string girişi alırsak ne yapabiliriz. Aklımda bir kaç fikir var ama sizden de yorum bekliyorum.
acehreli (Moderatör) #2
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ı
Her sınıfın en üstünde object sınıfı var. Ama bunun kapsama anlamına geldiğini söyleyemeyiz.

Ayrıca D'nin tür sistemi C++'dan bile daha sağlam olduğu için int'in içine string okuyamayız. Yanılmıyorsam okuma işlemi sırasında bir hata [exception] atılır.

Tam olarak nasıl bir durum düşünüyorsun?

Ali
canalpay (Moderatör) #3
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ı
Atıyorum bir sayı oyunu yazdım. D bana gelişigüzel bir sayı seçiyor. Bende bir sayı giriyorum. bana aklındaki sayının girdiğim sayıdan daha büyük yada daha küçük olduğunu, bildiysem bildiğimi söylüyor ve tekrar oynamak ister misin diye soruyor yada sayı gireceğim yerde 'h' yazınca programdan çıkıyor. Bunun içinde sayı girersem işaretçiyle atadığım sayıya int olması gerekecek. ama oyundan çıkmak istersem işaretçi ile atadığım değişkenin string olması gerekiyor. Tabi string atayıp inte çevrilmesi gerekiyorsa sonradan da çevirebilirim. ama ben bunun için genel bir tür oluşturabilir miyim diye soruyorum.


c# tada genel türün adı object di . ama d de kullanamadım
acehreli (Moderatör) #4
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ı
Kendin genel bir tür oluşturabilirsin, ama o da sonuçta mutlaka dizgi olarak almak ve sonra kendisi int'e dönüştürmek zorundadır.

Bunun nedeni, girişin bir karakter akımı olmasıdır. İçinde ne olduğunu anlayabilmek için öncelikle mutlaka bir dizgiye alınması gerekir. int okurken de arka planda zaten kütüphane önce bir dizgiye okur ve ondan sonra int'e dönüştürür.

import std.stdio;
import std.cstream;
import std.conv;
 
void main()
{
    write("Sayı veya 'h' lütfen: ");
    dchar[] girdi;
    din.readf(&girdi);
 
    if (girdi == "h") {
        writeln("Güle güle...");
 
    } else {
 
        try {
            int değer = to!int(girdi);
            writeln("Teşekkür: ", değer);
 
        } catch (ConvError e){
            writeln("Bak bu olmadı işte! :)");
        }            
    }
}

Ali
acehreli (Moderatör) #5
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ı
Temel türlerin object'ten türediklerini hiç sanmıyorum. Sınıfların üstünde object vardır ama temel türler sınıf olmadıkları için onların yalnızca bir kaç niteliği [property] vardır.

Ali
canalpay (Moderatör) #6
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 #4
Çok teşekkürler. Benim asıl sormak istediğim http://tr.wikibooks.org/wiki/C_Sharp_Programlama_Dili/De%C… bu özzellik var mı.
acehreli (Moderatör) #7
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 #5
Hayır yok, ve D'nin atası olan C mantığına da çok ters. Kuvvetli tür denetimi [strongly type-safe] sağlayan dillerde derleme zamanında tür uyumluluğu şarttır.

Boost kütüphanesinin Any veya Variant türleri C++'nın bu kısıtlamasının önüne geçerler ama onlar da tür güvenliğini çalışma zamanında hata atarak sağlarlar.

Ali
canalpay (Moderatör) #8
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ı
int değer = to!int(girdi);

Buradaki '!'(ünlem) ne işe yarıyor. Daha önce uniform'da da vardı. Orada da başlangıç ve sonuç değerini kapsayıp kapsamayacağını gösterirken kullanıyorduk.
acehreli (Moderatör) #9
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ı
to, bir şablon... O ünlem işaretinden sonra gelenler şablon parametresi oluyorlar. Normalde şöyle yazılması gerek:

to!(int)(girdi);

Anlamı, to şablonunun int türü için gerçeklenmiş hali... Bu örnekte, şablon parametresi dönüştürülece olan hedef tür anlamındadır. Yani girdiyi int'e dönüştür...

D'de tek parametre alan şablonlarda parantezleri kullanmak da gerekmediği için:

to!int(girdi);

ve öyle yazınca C zamanında bile yazmak zorunda olduğumuz haline de benziyor:

to_int(girdi);
to_double(girdi);
// vs. 

Yani böyle yazınca _ karakterinin yerini D'de ! karakteri almış oluyor.

Ali
canalpay (Moderatör) #10
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ı
Cevabınız için çok teşekkür ederim. Bu to çok güzelmiş. Şuan deneyemiyorum ama veri kaybı olsada double'ı integer'a filan çevirir değil mi. Birde ! görünüşü diğerlerinden daha güzel. D de en çok sevdiğim şeylerden biriside kodların görünüşü :-) Hem kodların rahat okunmasınıda sağlıyor.
acehreli (Moderatör) #11
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ı
Ben deneyiverdim: :)

    double d = 1.2;
    int i = to!int(d);
    int j = cast(int)d;

Tabii sayısal türler arasındaki dönüşümler cast de kullanılabiliyor.

Eğer D'nin görünüşünü seviyorsan, bir de onun üstüne kurulu ve Python'a benzeyen öteki dile bak... diyecektim ama ismini hatırlayamıyorum. :( Birisi dmd derleyicisini kullanarak aynı Python'a benzeyen son derece temiz bir dil geliştirmiş.

Ali
canalpay (Moderatör) #12
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ı
Evet pythonunda güzel ve temiz bir görünüşü var. Artık üçüncü sürümünde de D gibi türkçe değişkenler kullanılabiliyor. ama kimse 3'e geçemiyor. Ve nedense ben şuana kadar D nin görünüşünü Pythondan daha çok sevdim.

Nedense girintilemeyi sevmiyorum. Çok kırılgan oluyor. İstersen her dilde girintili yazarsın ama küme parantezi sayesinde kırılgan olmuyor. Bu kırılganlık yüzünden ve bazı özelliklerden dolayı şirketlerde varsayılan dil olarak kullanılmayacaktır. Sadece hızlı bir şekilde programı denemek için kullanılcak.

Ama  Doğrusu php'ye bakan biri hepsine şükreder  :-D  Php'de sevdiğim tek nokta nedense koda baktığında fonksiyon ne işe yarar anlıyorsun. Python'da pek böyle değil. Bunu başkasıda demişti. Ama php'de doğru düzgün bir görünüme sahip değil. Çoğu kişi karma kod yazıyor. Kodlar anlaşılmıyor. Hatta sen bile bir süre sonra yazdığın kodu anlamyorsun :-D

Benim asıl merak ettiğim şey hızları. D ile Python'da aynı sayıda hello world çıktısı yazdırdım. İkiside eşit hızda yazdı. Derlemeli dilin farkı ne o zaman. Hızlı olmadıktan sonra yorumlamalı dil daha iyi olmaz mı. Ne için aynı hızda yazdı hala anlamadım.

D de şuanlık sevmediğim tek bir şey var. O da web programcılığı düzgün olarak yapılmıyor. :-(  Aslında şuanda varolan bütün modern programlama dillerinde web programlama çok iyi bir şekilde yapılıyor. C# Java Python Ruby Php(6.sürümünden sonra Masaüstü programcılığı hakkında oldukça ilerleme olacak diye duymuştum.) Perl...

Birde D2 hiç kararlı gözükmüyor. Bu pek önemli değil. Ben öğrenene kadar 3.sürüm çıkar :-) Ama bu yüzden belgelendirme çalışmasıda çok zayıf. Bu açıdan en iyisi Php birde C# olabilir.
acehreli (Moderatör) #13
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ı
Her dilin uygun olduğu sorun ayrı. D'de de web programlama yapılır ama cgi olarak...

Tek bir hello world programıyla programları karşılaştıramayız. Programın diskten okunması yanında çalışması arasında dünyalar kadar fark vardır. Örnek:

D programının diskten okunma süresi: 1 saniye (gerçekten de olabilir, örneğin aynı anda başka bir programın giriş çıkış ihtiyacı da olabilir

Python programının diskten okunma süresi: .5 saniye

D çalışma süresi (tamamen uyduruyorum): .001 saniye
Python çalışma süresi (tamamen uyduruyorum): .1 saniye

Yani D 10 katı hızlı olsa bile diskten okuma zamanı yanında gölgede kalır.

Dilleri karşılaştıran çok güzel bir site var. Bu işi, çok değişik ve çok sayıda programı her dil için çalıştırarak yapıyor:

http://shootout.alioth.debian.org/u32q/benchmark…?test=a…

Python bazı durumlarda diğer dillerden 100-300 kat yavaş olabiliyor. O tabloda D yok ama C++'a yakın olarak yukarılarda olacağını düşünebiliriz. (Aslında eskiden IBM'in C++ derleyicisinin ve D'nin de olduğu grafikler de görmüştüm. (?))

Ali
canalpay (Moderatör) #14
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ı
Farkındayım ama D dili ile bir şey yapınca uçsun istiyorum.:-) Zaten pythonun çok yavaş olduğunu biliyorum.

Web programlama olarakta acaba diğer söylediğim diller kadar başarılı olabilir mi. Birde framework ile daha rahat programlanabilir sanırım. Abartığımın farkındayım ama ileride web programlama dersleri olabilir mi.
acehreli (Moderatör) #15
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ı
Birisi yazarsa olur. :) Benim web programcılığım statik sayfalar ve cgi programlama düzeyinde.

Ali
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:
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-22, 03:02:28 (UTC -08:00)