Thread overview
enum'u ehlileştirmek...:)
May 16, 2012
Salih Dinçer
May 16, 2012
Salih Dinçer
May 16, 2012
Salih Dinçer
May 16, 2012
zafer
May 17, 2012
Salih Dinçer
May 17, 2012
zafer
May 17, 2012
Salih Dinçer
May 19, 2012
Salih Dinçer
May 16, 2012

Ben beceremedim, buyrun bu güzel kısrağı ehlileştirin...:)

import std.stdio;

enum harfSay(int x=5) {
	enum harfler {
		a=1,b,c,ç,D,e,f,g,ğ,h,i,ı,j,k,l,m,n,o,ö,p,r,s,ş,t,u,ü,v,y,z,x=harfler.a
	} harfler harf;

	do harf++; while (harf < x);

	return harf;
}

void main() {
	writefln("%s gibisi yok...", harfSay);
	writeln(harfSay(30));
}

Burada amacım sona geldiğinde başa dönmesi ama beceremedim. Bir ara Ali hocam ile bu konuyu konuşmuştuk ama hatırlayamadım...:(

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

May 16, 2012

Bu şekilde yapmak (mod kullanmak) benim de aklıma geldi (ama bu daha zarif, bende if vardı) ve tabi bu bir çözüm...

Hatta görünüşe göre kısa bir kodlama. Ancak yapmak istediğim uygulamanın mantığı gereği harf++; şeklinde bir bölüm gerekli. Belki de işlevi bir yapıya dönüştürülebilirsek benzer bir şekilde yapılabileceğini tahmin etmekteyim.

Dip Not: Konuyla alakası yok ama 'std.uni' sınıfındaki 'toUpper()' işlevi enum'lar ile çalıştırmayı beceremedim. Çeşitli 'cast()' dönüşümlerine rağmen hep boş değer döndüğünü gördüm. Belki trileri'yi kullanmalıydım?

Teşekkürler...

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

May 16, 2012

Sanırım aynısı enum ile de yapabilirdik ama 'toUpper()' çalışmazdı...

import std.stdio, std.uni;

string harfSay(int x=4) {
	string[int] harfler = [
		 0:"a", 1:"b", 2:"c", 3:"ç", 4:"d", 5:"e", 6:"f", 7:"g", 8:"ğ", 9:"h",
		10:"i",11:"ı",12:"j",13:"k",14:"l",15:"m",16:"n",17:"o",18:"ö",19:"p",
		20:"r",21:"s",22:"ş",23:"t",24:"u",25:"ü",26:"v",27:"y",28:"z"
	]; int harf;

	do harf++; while (harf < x);

	return harfler[harf % harfler.length];
}

void main() {
	writefln("%s gibisi yok...", toUpper(harfSay));
	writeln(harfSay(30));
}

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

May 16, 2012

Bu 0 indeksiyle başlıyor:

import std.stdio;

enum harfSay(int x=4) {
   enum harfler {
       a,b,c,ç,D,e,f,g,ğ,h,i,ı,j,k,l,m,n,o,ö,p,r,s,ş,t,u,ü,v,y,z
   }

   return cast(harfler)(x % (harfler.max - harfler.min + 1));
}

void main() {
   writefln("%s gibisi yok...", harfSay());
   writeln(harfSay(29));
}

Ali

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

May 16, 2012
enum harfSay(int x=5) {
   enum harfler {
       a=1,b,c,ç,D,e,f,g,ğ,h,i,ı,j,k,l,m,n,o,ö,p,r,s,ş,t,u,ü,v,y,z,x=harfler.a
   } harfler harf;

   do harf++; while (harf < x);

   return harf;
}

enum'ların böyle tasarlanabildiğine hiç dikkat etmemiştim. Yanlış anlamadıysam bir nevi metot gibi işlem yapıyor. Peki böyle bir yapının char döndüren bir metotdan farkı ne?

Daha öğrenecek çok şey var :)

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

May 17, 2012

Sanırım D'de enum farklı şekillerde de (immutable gibi) kullanılabiliyor. Tıpkı değişken eşitler gibi enum tanımlanabiliyor. Ancak benim diğer dillerde öğrendiğim bir şey D'de yok...:(

Hoş burada yapmak istediğim şey ile şimdi anlatacağım aynı. Ama tek cümle ile ifade etmem gerekirse:

Tüm elemanlar üzerinde bir değişkenmiş gibi gezebiliyoruz ve son elemana geldiğinde başa dönüyor. İşte bu başa dönme hadisesi D'de yok. Aslında geliştiricileri başına final koyduğumuzda istediğimiz gibi çalıştıracak bir şekle getirseler ne iyi olurdu. Çünkü enum'u alıştığımız gibi kullanmak deveye hendek atlatmak kadar zor...

Özetle bu enum, vahşi bir at değil belki de binatçı bir deve...:)

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

May 17, 2012

Alıntı (Salih Dinçer):

>

Sanırım D'de enum farklı şekillerde de (immutable gibi) kullanılabiliyor.

Ben de baştan garipsemiştim ama sonunda mantıklı bir açıklamasını buldum. "Bir enum türüne ait olmayan enum değerleri" başlığında:

http://ddili.org/ders/d/enum.html

Şöyle demişim:

"Ancak, sihirli sabitlerden kurtulabilmek için ayrıca bir enum türü belirlemek doğal olmayabilir. Örneğin tek amacımızın 24 saatteki toplam saniye sayısını tutan bir sabit tanımlamak olduğunu düşünelim. Böyle tek sabitin tanımlanmasında ayrıca enum türü belirlemeye gerek yoktur."

Ayrıca, enum değerleri de değişmez olduklarından immutable gibi isimli sabit değerler oldukları C ve C++'ta da doğru.

Alıntı:

>

Tüm elemanlar üzerinde bir değişkenmiş gibi gezebiliyoruz ve son elemana geldiğinde başa dönüyor. İşte bu başa dönme hadisesi D'de yok.

C ve C++'ta da aynı durum. Öğrenmek için soruyorum: Hangi dillerde var?

Alıntı:

>

Çünkü enum'u alıştığımız gibi kullanmak deveye hendek atlatmak kadar zor...

Bu gerçekten sık gereken bir ihtiyaç mı? Hangi durumlarda kullanılacağını düşünüyorsun? Değerlerin atlayabiliyor olması da işin içine girince bence derleyicinin bu konuya karışması doğru olmaz. ++e yapıldığında bir sonraki değere mi atlasın? Onun gerçekleştirmesi yavaş olurdu: Her ++ işleminde bir arama sonucunda bir sonraki değeri belirlemesi gerekirdi. D, C ve C++'tan alışılan davranışı devam ettirmiş.

Ali

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

May 17, 2012

Alıntı (Salih Dinçer):

>

Tüm elemanlar üzerinde bir değişkenmiş gibi gezebiliyoruz...

Ben hala olayı tam olarak anlamadım. Bu bahsettiğin şeyi bir dizi ile yapmak zaten mümkün değilmi? Dizi elemanları üzerinde de isteğin gibi gezebilirsin. Burada enum kullanmak için gerekçemiz nedir? Yada sadece kişisel bir seçim durumumu söz konusu?

Alıntı (acehreli):

>

... Değerlerin atlayabiliyor olması da işin içine girince bence derleyicinin bu konuya karışması doğru olmaz...

Bu konuda bende Ali'ye katılıyorum. Bazı işleri derleyici bizim yerimize üstlenince aslında bizim serbest bölgemizde daralmaya başlayacaktır. Ben bunun yerine bir takım işlerin programcıya bırakılmasını daha doğru buluyorum ve bu yaklaşımın programcıya daha esnek bir çalışma ortamı sağladığını düşünüyorum.

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

May 17, 2012

Alıntı (acehreli):

>

C ve C++'ta da aynı durum. Öğrenmek için soruyorum: Hangi dillerde var?
C#'da böyle...

Alıntı (zafer):

>

Bu bahsettiğin şeyi bir dizi ile yapmak zaten mümkün değilmi?
Immutable olduğu için dizilerden farklı ama ikinci verdiğim örnekteki (associative array) zannedersem çalışma zamanında değerleri değiştirilebiliyor ki bunu hiç denemediğim ve henüz bilmediğim için belki de Ankara'daki D sunumunu yapmamalıyım...:(

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

May 20, 2012

Alıntı (Salih Dinçer:1337322102):

>

Alıntı (acehreli):

>

C ve C++'ta da aynı durum. Öğrenmek için soruyorum: Hangi dillerde var?
C#'da böyle...
Sanırım ben başka bir şey ile karıştırdım ki neremden uydurduysam böyle bir şey yok... :blush:

Bu konuya devam ettiğim başlık: http://ddili.org/forum/thread/816

Zaten şurada (http://stackoverflow.com/questions/642542/how-to-get-next-previous-enum-value-in-c-sharp) tartışılan C# kodları böyle bir şeye ihtiyaç duyulduğunu ama kuramsal açıdan dillerin tek başlarına desteklemediğini gösteriyor.

D, bunu final takısı ile destekleyebilseydi ne iyi olurdu... :rolleyes:

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