Forum: D Programlama Dili RSS
typeof(return) imkani ve function templateleri uzerine
Mengu (Moderatör) #1
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: typeof(return) imkani ve function templateleri uzerine
bugun std.array kodunu incelerken https://github.com/D-Programming-Language/phobos/blob/mast… su satirlara denk geldim ve acikcasi bunu bilmiyordum. pek hosuma gittigini soylemeliyim. fonksiyon icerisinde return type'i bilebilmek ve hatta onu dinamik bir bicimde static bir dilin icinde kullanmak hosuma gitti. bu d dokumanlarinin adam akilli hale getirilmesi lazim. declarations kisminda bu yaziyor ama her sey ufak tefek, kenarda kosede kaldigi icin hic gormemisim acikcasi veya yeni yazdilar. :)

bir de std.net.curl kodunu inceliyordum orada da karsima su metod cikti: https://github.com/D-Programming-Language/phobos/blob/mast…. burada da yeni ogrendigim bir sey oldu; d'de typelari fonksiyon argumani olarak kullanamiyormusuz. kullanmak istedigimiz zaman da function template'i yazmak durumundayiz buradaki gibi. burada da merak ettigim tek nokta neden enum kullanildigi.
http://www.mengu.net - some kind of monster
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ı
Mengu:
fonksiyon icerisinde return type'i bilebilmek ve hatta onu dinamik bir bicimde static bir dilin icinde kullanmak hosuma gitti.

İşin içinde şablon olunca dönüş türü şablonun parametrelerine bağlı olabiliyor. O yüzden typeof(return) neredeyse şart.

d'de typelari fonksiyon argumani olarak kullanamiyormusuz.

Bu, C ve C++'tan beri gelen bir durum. Fonksiyonlar değer alırlar ama türler değer değildir diye...

neden enum kullanildigi.

private template isCurlConn(Conn)
{
    enum auto isCurlConn = is(Conn : HTTP) ||
        is(Conn : FTP) || is(Conn : AutoProtocol);
}

isCurlConn bir eponymous template çünkü içindeki tek tanımın ismi şablonun ismiyle aynı. Böyle şablonlarda şablonun kullanımı şablonun içindeki o tek tanım yerine geçer.

enum, o değerin derleme zamanında hesaplanmasını ve C makrolarına benzer biçimde kullanımını sağlıyor. Örneğin, kod içinde isCurlConn!A yazıldığı zaman kodun içine ya false gömülecek ya true. Bir başka deyişle, isCurlConn!A bir hazır değer oluyor. Değişken değil, adresi alınamaz, vs.

Ali
Mengu (Moderatör) #3
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Mengu:
fonksiyon icerisinde return type'i bilebilmek ve hatta onu dinamik bir bicimde static bir dilin icinde kullanmak hosuma gitti.

İşin içinde şablon olunca dönüş türü şablonun parametrelerine bağlı olabiliyor. O yüzden typeof(return) neredeyse şart.

d'de typelari fonksiyon argumani olarak kullanamiyormusuz.

Bu, C ve C++'tan beri gelen bir durum. Fonksiyonlar değer alırlar ama türler değer değildir diye...

neden enum kullanildigi.

private template isCurlConn(Conn)
{
    enum auto isCurlConn = is(Conn : HTTP) ||
        is(Conn : FTP) || is(Conn : AutoProtocol);
}

isCurlConn bir eponymous template çünkü içindeki tek tanımın ismi şablonun ismiyle aynı. Böyle şablonlarda şablonun kullanımı şablonun içindeki o tek tanım yerine geçer.

enum, o değerin derleme zamanında hesaplanmasını ve C makrolarına benzer biçimde kullanımını sağlıyor. Örneğin, kod içinde isCurlConn!A yazıldığı zaman kodun içine ya false gömülecek ya true. Bir başka deyişle, isCurlConn!A bir hazır değer oluyor. Değişken değil, adresi alınamaz, vs.

Ali

c ve c++ programcisi olmadigim icin bu noktayi bilmiyordum. bir kac jvm dilinde oradan oraya type bilgisi tasimak mumkun, d'de olmamasi sasirtti beni. :)

butun olay enum'da mi bitiyor? sadece boolean bir deger olarak verilseydi yine derleme zamani expression false veya true'ya cevrilmeyecek miydi?
http://www.mengu.net - some kind of monster
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ı
Mengu:
sadece boolean bir deger olarak verilseydi yine derleme zamani expression false veya true'ya cevrilmeyecek miydi?

Bu örnekte öyle hatta çoğu başka örnekte de öyle olabilir. Ama bool değişken olarak tanımladığın zaman teoride bellekte yeri olan bir değişken haline gelir. Sonra onu programda kullandığın her yerde o bellekteki yerinden bakılıp okunması gerekir çünkü son okunduğundan bu yana değişmiş olabilir.

Tabii, derleyici o değişkenin hiç değişmediğini görüp yerine false veya true değer de kullanabilir ama bunlar teoride öyle. enum yapınca derleme zamanı değeri olduğunu tam bilmiş oluyorsun.

Başka bir fark da değişkenin adresidir: enum olduğunda adresi de alınamaz çünkü yeri yoktur, yalnızca değerdir.

Ali
Mengu (Moderatör) #5
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Mengu:
sadece boolean bir deger olarak verilseydi yine derleme zamani expression false veya true'ya cevrilmeyecek miydi?

Bu örnekte öyle hatta çoğu başka örnekte de öyle olabilir. Ama bool değişken olarak tanımladığın zaman teoride bellekte yeri olan bir değişken haline gelir. Sonra onu programda kullandığın her yerde o bellekteki yerinden bakılıp okunması gerekir çünkü son okunduğundan bu yana değişmiş olabilir.

Tabii, derleyici o değişkenin hiç değişmediğini görüp yerine false veya true değer de kullanabilir ama bunlar teoride öyle. enum yapınca derleme zamanı değeri olduğunu tam bilmiş oluyorsun.

Başka bir fark da değişkenin adresidir: enum olduğunda adresi de alınamaz çünkü yeri yoktur, yalnızca değerdir.

Ali

anladim. tesekkurler. :)
http://www.mengu.net - some kind of monster
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-21, 11:13:16 (UTC -08:00)