Merhaba,
Şurda, yabancı forumda, ne zamandır içimde biriken ama bir türlü çözümleyemediğim const kavramını tartışmaya açtım. Belli ki D'nin kurtlarının umrunda bile olmayacak, sıradan programcılar da benzer const belirsizliği yüzünden yazacak bir şey bulamayacak ama bence çok var, oradan bir alıntı:
On Sunday, 3 April 2022 at 22:42:15 UTC, Ali Çehreli wrote:
> > >This is covered in the const FAQ:
The programs I write are not multithreaded. Also, I don't
work as team.
[...]
Malum makalenin eski olduğunu yeni öğrendim. Ama ne yalan söyleyeyim, hangi tasarım desenine baksam veya const'u anlatmaya çalışan kişisel web sitesi sahiplerinin örneklerini incelesem, basit örneklerle geçiştirdiklerini gördüm. Öyle ki sabitler için PI sayısı örnek verdiklerini ve onu kullanarak dairenin çevresini hesaplıyorlar, bu kadar sığlık olamaz!
Cümlelerimden bu konunun bende saplantı haline gelebileceğini hissetmiş olabilirsiniz çünkü senelerdir çözümleyemedim. Yanlış anlaşılmasın, genel geçer kaidelere aykırı davranmak istemiyorum ama const bir canlı olsa "olm, sen ne ayaksın, buralarda işin ne!" demek geçiyor içimden. Hoş devamında argo da var, sıkıntımı kusacağım da terbiyem elveremiyor :)
Neden burada devam ediyorum?
Çünkü İngilizce'de bunları yazamam. Yazsam da anlamazlar! Burada da cevap veren olmazsa canı sağ olsun. Şöyle sağlam bir örnek çıkarın canım yeyin :)
Şu eski makaledeki örneği günümüze uyarladım ve anlamaya başladım ama tam anlamıyla çalıştıramadım:
import std.stdio;
size_t strLen(const(char)* p)
{
auto i = p;
while(*i) ++i;
return i - p;
}
struct Foo
{
size_t len;
bool lenDone;
const(char)* str;
this(string str)
{
this.str = str.ptr;
}
@property length() //const <- iki ucu kanlı bıçak!
{
if (!lenDone)
{
len = strLen(str);
lenDone = true;
}
return len;
}
}
void main()
{
const Foo f = Foo("hello");
strLen("moon".ptr).writeln; // çalışıyor,
// f.length(); // consttzünden çalışmıyor!
if(f.lenDone)
write("uzunluğu hesaplanmadığı için: ");
f.len.writeln; // "0"
}
O zamanlar string temel yapısı yoktu sanırım. O yüzden length()
özelliğinin olmadığını varsayarak, işaretçinin 0 karakterini döndürene kadar dizge üzerinde gezmesi gerekiyor. Ama şu const olayları yüzünden iki ucu malum şey :)
On Sunday, 3 April 2022 at 22:42:15 UTC, Ali Çehreli wrote:
>So you agree with that article. :) The rest of us who work with multi-threaded programs or with other developers agree with it as well. ;)
Dediğim gibi makale beni ilgilendirmiyor. Belki gelecekte çoklu iş parçacağı yoğunlukla kullanılabilir. Ancak const kavramı C'ye sonradan dahil edilse bile çok da yeni bir kavram değil hani. Hal böyleyken benim yaşımdan bile büyük olan bir const kavramı sağlam bi'şey olmalı.
Sevgiler, saygılar...