Thread overview
Sabit Değişkenler
Apr 04, 2022
Salih Dincer
Apr 04, 2022
Ali Çehreli
Apr 04, 2022
Salih Dincer
April 04, 2022

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:

https://dlang.org/articles/const-faq.html

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...

April 03, 2022
On 4/3/22 20:28, Salih Dincer wrote:

> senelerdir çözümleyemedim.

Ben ise çok basit bir kavram olduğunu düşündüğümden ya sen baştan yanlış başladın ya da biz seni anlayamıyoruz. :)

> Şu eski makaledeki örneği günümüze uyarladım ve anlamaya başladım ama
> tam anlamıyla çalıştıramadım:

O örnek, "logical const" kavramıyla ilgili. Ama onun 'const'ı anlamak ile ilgisi yok. D'de "logical const" olmadığına göre zaten o örneğin orada işi de olmamalı.

> 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ı.

Önümüzdeki sohbette bu konuyu da bağlayalım. O zamana kadar ben neden dünyanın en kolay kavramlarından biri olduğunu düşünmediğini anlamaya çalışacağım. :)

Eğer kullanmaya ne zaman karar vereceğini düşünüyorsan, herşeyi olabildiğince 'const' yap. Yapamadığın zaman 'const'ı kaldır. :)

Ali

April 04, 2022

😀 😀 😉

On Monday, 4 April 2022 at 03:47:56 UTC, Ali Çehreli wrote:

>

On 4/3/22 20:28, Salih Dincer wrote:
Eğer kullanmaya ne zaman karar vereceğini düşünüyorsan, herşeyi olabildiğince 'const' yap. Yapamadığın zaman 'const'ı kaldır. :)

Sorun da bu ya, işin içine const girince hep bir yerlerde hata veriyor. Temelde basit ama kim kodlarındaki nesnelerde (tümünün %5'i olsa bile az) kullanıyor ki?

İnşaallah toplantıya katılabilirim...

Salih Dinçer