Jump to page: 1 2
Thread overview
Biçimlendirmelerde enum kullanmak!
Feb 22
Erdem
Feb 23
Erdem
Feb 26
Erdem
Mar 01
Erdem
Mar 02
Erdem
Mar 04
Erdem
February 21

Daha doğru bir ifadeyle, sıklıkla enum "kullanılması" tavsiye efilir...

Ne diyor bu diyeceksiniz, o yüzden örnekle başlayalım:

import sdb.array : arrayBuffer;

void main()
{
  enum fmt = `"%s" verisi`;
  auto str = "denemeler enteresan".dup;
  auto arr = str.arrayBuffer;

  // farz edelim yukardaki gibi bir diziyi
  // aşağıdaki gibi ekrana yazdırdık.

  import std.stdio;
  str.writefln!fmt;

Tahmin edeceğiniz gibi ekranda "denemeler enteresan" verisi yazmalı. Elbette herşey tek satırla da yazılırdı:

import std.stdio : writefln;

void main()
{
  "denemeler enteresan".writefln!`"%s" verisi`;
}

Ama o zaman biçimlendirme işaretlerinin fazlalığı (D için zaten " işaretini kullanırken kendim için de kullanmalıyım ya) bizi alternatif işaretlere veya önerdiğim gibi yöntemlere yönlendiriyor. Sonuçta o satır çok uzun oluyor.

Hoş, daha birçok olanak var da enum'lar sanki, bir şeyleri parçalara bölme konusunda en ideali! Üstelik şablonlar içinde kullandığınızda daha enteresan şeyler yapmanız mümkün.

SDB@79

February 22

On Wednesday, 21 February 2024 at 02:53:46 UTC, Salih Dincer wrote:

>

Daha doğru bir ifadeyle, sıklıkla enum "kullanılması" tavsiye efilir...

Bu örnekte kullanıcı oluşturuyor.

import std.random:uniform;
import std.conv:to;
import std.stdio:writeln;

struct Kullanıcı
{
    int no;
    string isim;
    string şifre;

    string toString()
    {
        return to!string(no) ~ " " ~ isim ~ " " ~ şifre;
    }
}

Kullanıcı kullanıcıOluştur()
{
    Kullanıcı kullanıcı;
    kullanıcı.no = uniform(3, 39876);

    enum İsimler { Ali, Veli, Ahmet, Ayşe, Irmak, Hasan, Hüseyin, Osman }
    enum Şifreler { çokgizli, azgizli, gizlideğil }

    kullanıcı.isim = to!string(uniform!İsimler);
    kullanıcı.şifre = to!string(uniform!Şifreler);
    return kullanıcı;
}

void main()
{
    for (int i = 0; i < 10; ++i)
    {
        auto geçerliKullanıcı = kullanıcıOluştur();
        writeln(geçerliKullanıcı);
    }
}

Bazı isimler birden fazla seçilmiş.

Her ismi bir kere seçebiliyor muyduk?

February 22

On Thursday, 22 February 2024 at 19:24:51 UTC, Erdem wrote:

>

Her ismi bir kere seçebiliyor muyduk?

Evet, bu partialShuffle() ile mümkün görünüyor ama ben olsam EnumMembers şablonunu da kullanıp öyle rasgele karıştırma yapardım. Sonrası basit zaten foreach'e koy, tek tek ekrana yaz. Böylece nesneyi üreten işlev böyle basit olurdu:

import std.stdio, std.random, std.conv;
import std.traits : EnumMembers;

enum İsimler { Ali, Veli, Ahmet, Ayşe, Irmak, Hasan, Hüseyin, Osman }
enum Şifreler { çokgizli, azgizli, gizlideğil }

auto kullanıcıOluştur(E)()
{
    auto şifre = uniform!E.to!string;
    auto no = uniform(3, 39876);

    return Kullanıcı(no, "", şifre);
}

void main()
{
  foreach(isim; partialShuffle([EnumMembers!İsimler], 1))
  {
    auto geçerliKullanıcı = kullanıcıOluştur!Şifreler;
    geçerliKullanıcı.isim = isim.to!string;
    geçerliKullanıcı.writeln;
  }
}

Ayrıca yaptığım en önemli değişiklik, şablon parametresi eklemek oldu. Çünkü ileride şifre ve isim listesi değişebileceğinden, enum'ları dışına almak mantıklı olan.

SDB@79

February 23

Teşekkürler.

Aynı işi randomShuffle da yapıyormuş.

Hiç D programına benziyor mu ;-)

import std.random : karıştır = randomShuffle;
import std.stdio  : yaz = writeln;
import std.traits : Üyeler = EnumMembers;

void main()
{
    auto aralık = [0, 1, 2, 3, 4, 5];
    yaz(aralık);
    yaz(aralık.karıştır());
    enum İsimler { Ali, Veli, Ahmet, Ayşe, Irmak, Hasan, Hüseyin, Osman }
    auto isimListesi = [Üyeler!İsimler];
    yaz(isimListesi.karıştır());
    enum Şifreler { çokgizli, azgizli, gizlideğil, yok,
                    basit, kolay, karışık, sağlam  }
    auto şifreListesi = [Üyeler!Şifreler];
    yaz(şifreListesi.karıştır());
}
February 23

On Friday, 23 February 2024 at 19:32:51 UTC, Erdem wrote:

>
import std.random : karıştır = randomShuffle;
import std.stdio  : yaz = writeln;
import std.traits : Üyeler = EnumMembers;

Hiç D programına benziyor mu ;-)

Harika olmuş! İşte D nelere kadir ki kıymetini bilene. En başta Türkçe (yani UTF) desteğinin olabilmesi bile her şeye bedel. Yıllarca Türkçe karakter kullanamamak bizim gibi gelişmekte olan ülkelerden çok şey alıp götürdü.

Üstelik arada karışık Türkçe/İngilizce yapmanın da avantajı olabilir. Bazı vurgulanmasını istediğimiz şeyler İngilizce ve çoğunluğu Türkçe yazılırsa, bence çift boyutlu bakmak gibi oluyor. Özetle, destekliyorum...

SDB@79

February 26

Uygulamayı farklı kullanıcılar üretecek şekilde değiştirdik.

import std.random : karıştır = randomShuffle;
import std.stdio  : yaz = writeln;
import std.traits : Üyeler = EnumMembers;
import std.conv : to;
import std.random : rastgele = uniform;

alias metneÇevir = to!string;

struct Kullanıcı
{
    int no;
    string isim;
    string şifre;

    string toString()
    {
        return metneÇevir(no) ~ " " ~ isim ~ " " ~ şifre;
    }
}

static sayaç = 0;
enum İsimler { Ali, Veli, Ahmet, Ayşe, Irmak, Hasan, Hüseyin, Osman }
enum Şifreler { çokgizli, azgizli, gizlideğil, yok,
                basit, kolay, karışık, sağlam  }

static İsimler[] karışıkİsimler;
static Şifreler[] karışıkŞifreler;

Kullanıcı kullanıcıOluştur()
{
    if (sayaç == 0)
    {
        karışıkİsimler = [Üyeler!İsimler].karıştır();
        karışıkŞifreler = [Üyeler!Şifreler].karıştır();
    }

    Kullanıcı kullanıcı;
    kullanıcı.no = rastgele(10, 10000);
    kullanıcı.isim = metneÇevir(karışıkİsimler[sayaç]);
    kullanıcı.şifre = metneÇevir(karışıkŞifreler[sayaç]);
    sayaç += 1;
    if (sayaç == 8)
        sayaç = 0;
    return kullanıcı;
}

void main()
{
    for (int i = 0; i < 16; ++i)
    {
        Kullanıcı kullanıcı = kullanıcıOluştur();
        yaz(kullanıcı);
    }
}
March 01

On Monday, 26 February 2024 at 19:06:15 UTC, Erdem wrote:

>

Uygulamayı farklı kullanıcılar üretecek şekilde değiştirdik.

Değiştirdi(k) derken çoğul konuşuyorsunuz! D programlayan kaç kişiyiz acaba? Bir gün üniversite bünyesinde D Günleri yaparsak kaç kişi katılır?

alias metneÇevir = to!string;

Bu kadar da değil hani. Yani bu kadar Türkçeleştirme'ye karşıyım. Çünkü okumayı zorlaştırır. Zaten string bizim alışık olduğumuz temel tür ve to!() şablonu da çok kısa vr akıllı.

Sevgiler.

March 01

On Friday, 1 March 2024 at 02:13:25 UTC, Salih Dincer wrote:

>

Değiştirdi(k) derken çoğul konuşuyorsunuz!

Tevazu sahibi olmaya çalışıyoruz.

O nedenle birinci tekil şahıs kullanmayı pek tercih etmiyoruz.

>

Bir gün üniversite bünyesinde D Günleri yaparsak kaç kişi katılır?

Diyelim ki üniversiteden bir hoca dedi ki:

- Salih bey. Okulumuzdaki yerleşkeler farklı yerlerde bulunuyor.

- Dersleri MongoDB veritabanında metin olarak saklıyoruz.

- Basit bir ders içeriği şu şekildedir :

# Birinci ders

Ders içeriği burada bulunuyor.

*Eğik* ya da **koyu** yazabiliriz.

- Veritabanında kayıt saklanırken boşluklar \r\n ile değiştiriliyor.

# Birinci ders\r\n\r\nDers içeriği burada bulunuyor.\r\n\r\n*Eğik* ya da **koyu** yazabiliriz.

- Ben bu dersleri örneğin Emacs gibi bir metin düzenleyici ile yazayım. Sonra veritabanına kaydetsin.

- Bu uygulamayı D ile geliştirebilir miyiz?

March 02

On Friday, 1 March 2024 at 05:53:13 UTC, Erdem wrote:

>

- Bu uygulamayı D ile geliştirebilir miyiz?

Sanırım ben, 32 satırlık şöyle basit bir şey yapardım:

import std.file : readText;
import std.array : split;
import std.stdio, std.string : format;
import vibe.core;

enum ayraç = "#";

void main()
{
  auto dosya = readText("dersler.txt");
  auto dersler = dosya.split(ayraç);

  logInfo("Metin dosyası okundu ve dersler bölündü");

  import vibe.db.mongo;
  auto db = connectMongoDB("mongodb://localhost:27017/verilerim");
  auto tab = db.getDatabase("verilerim");
  auto col = tab.getCollection("derslerim");

  logInfo("Veritabanına bağlandı");

  foreach(i, d; dersler)
  {
    ++i;
    auto doc = col.createDocument();
    doc["ders"] = format("%s. ders", i);
    doc["veri"] = format("%s%s", ayraç, d);
    col.insert(doc);
  }
  logInfo("Veriler yüklendi");
  runApplication();
}

SDB@79

March 02

On Saturday, 2 March 2024 at 01:46:15 UTC, Salih Dincer wrote:

>

On Friday, 1 March 2024 at 05:53:13 UTC, Erdem wrote:

>

- Bu uygulamayı D ile geliştirebilir miyiz?

Sanırım ben, 32 satırlık şöyle basit bir şey yapardım:

  auto db = connectMongoDB("mongodb://localhost:27017/verilerim");

Vibe.d ile gelen Mongo sürücüsü ile sadece yereldeki veritabanına bağlanılabiliyor.

Bir tane daha Mongo sürücüsü var.

Eski Mongo C sürücüsüne bağlanması gerekiyor.

Yeni sürücü için d++ denilen araçla ilintileri oluşturmayı denedik.

İkisi de çalışmadı.

Diğer taraftan Vala ile uzaktaki Mongo sürücüsüne bağlanıp, dersler .md olarak indirilebiliyor.

D âdeta hala amatör kümede koşturuyor. Rakipleri birinci lige çıktı.

d++ yazılımı ilginç geldi.

Örneğin kat.h isminde bir tane C başlık dosyamız olsun.

#ifndef KAT_H
#define KAT_H

#define UC_MISLI(sayi) (sayi * 3)

int ikiKati(int sayi);

#endif

kat.c isminde de basit bir C kaynak kütüğümüz olsun.

int ikiKati(int sayi) { return sayi * 2; }

ana.dpp isminde bir kütük oluşturuyoruz.

#include "kat.h"

import std.stdio : yaz = writeln;

void main()
{
    yaz(ikiKati(UC_MISLI(7)));
}

Basit bir Make kütüğü oluşturalım.

default:
	gcc -c kat.c
	d++ ana.dpp kat.o

clean:
	rm *.o
	rm ana

make yazalım.

d++ C nesne kütüklerinden D uygulaması oluşturuyor.

« First   ‹ Prev
1 2