Thread overview
Bir S Yapısında İşlev Yükleme
Sep 14, 2022
Salih Dincer
Sep 15, 2022
Ali Çehreli
Sep 15, 2022
Salih Dincer
Sep 15, 2022
Ali Çehreli
Sep 15, 2022
Salih Dincer
September 14, 2022

Bunu ilk defa görüyorum nedir bu?

import std.stdio;

struct S
{
  int i;

  int num()
  {
    return i + 1;
  }

  int num(this X)() @property
  {
    return 2;
  }
}

void main()
{
  S a; // -> 1    -> 0
  assert(a.num() > a.i);
  a.num.writeln; // 1
}

Çıkış noktam şuradaki bildirim ve biraz değiştirdim. Peki, @property ile bir ilişkisi var mı bilmiyorum ama -1 dönmesi için ne yapılır? Yani (this X)'den nasıl bir davranış beklemeliyiz?

Teşekkürler...

September 14, 2022
On 9/14/22 16:49, Salih Dincer wrote:

>    int num()
>    {
>      return i + 1;
>    }
>
>    int num(this X)() @property
>    {
>      return 2;
>    }

Evet, işlev yükleme ama bir tane normal üye işlev var, bir tane de işlev şablonu... Şunları yazmışım:


http://ddili.org/ders/d/sablonlar_ayrintili.html#ix_sablonlar_ayrintili.this,%20%C5%9Fablon%20parametresi


http://ddili.org/ders/d/katmalar.html#ix_katmalar.this,%20%C5%9Fablon%20parametresi

Ama burada garip tabii ve anlaşılan hatalıymış da... Neyse, benim bildiklerim yukarıdaki bağlantıdakiler. :)

Ali

September 15, 2022
On Thursday, 15 September 2022 at 02:13:58 UTC, Ali Çehreli wrote:
>
> Evet, işlev yükleme ama bir tane normal üye işlev var, bir tane de işlev şablonu... Şunları yazmışım:
>
http://ddili.org/ders/d/sablonlar_ayrintili.html#ix_sablonlar_ayrintili.this,%20%C5%9Fablon%20parametresi

Burayı okumamıştım gerçi az önce ilk okumada bir şey anlamadım ama anlayana kadar okumaya devam...

Başlığı açmadan önce [şuraya](http://ddili.org/ders/d/islev_yukleme.html) baktım ve bahsedilmemişti. Çünkü sayfanın sonlarında **Yapılar için işlev yükleme** yer alıyor. Belki iki sayfa arasına bağlantı verilmesi iyi olabilir.

Başarılar...



September 15, 2022
On 9/15/22 00:28, Salih Dincer wrote:
> On Thursday, 15 September 2022 at 02:13:58 UTC, Ali Çehreli wrote:

> Burayı okumamıştım gerçi az önce ilk okumada bir şey anlamadım ama
> anlayana kadar okumaya devam...

this şablon parametresi, içinde bulunduğumuz türün tam tanımının bir takma ismi oluyor. Ben de typeof(this)'ten farkını şimdi bilmediğimi farkediyorum. (?)

> Çünkü sayfanın sonlarında **Yapılar için işlev
> yükleme** yer alıyor.

this şablon parametresi ile işlev yükleme olanakları bana bağımsız geliyor.

Ali

September 15, 2022

On Thursday, 15 September 2022 at 15:18:02 UTC, Ali Çehreli wrote:

>

this şablon parametresi, içinde bulunduğumuz türün tam tanımının bir takma ismi oluyor. Ben de typeof(this)'ten farkını şimdi bilmediğimi farkediyorum. (?)

Yani hocam konuyu şöyle bir örnekle toparlayabilir miyiz:

struct S
{
  int i;
  enum hata = "bu satır işlevsiz";
  import std.traits;

  @property inc(this s)()
  {
    static if(isMutable!s)
    {
      i++;
    } else assert(0, hata);

    return i;
  }

  @property inc(this s)(int n)
  {
    static if(isMutable!s)
    {
      i += n;
    } else assert(0, hata);

    return i;
  }
}

void main()
{
  import std.stdio;

  S mu;
  mu.inc(2).writeln; // 2
  mu.inc.writeln;    // 3

  const S im;
  im.inc(2).writeln; // hata
  im.inc.writeln;    // hata
}

Teşekkürler...