Volkan Atasever

mühendislik, edebiyat, retro computer, yazılım, şiir, nümismatik, bilişim, podcast ve daha bir çok yazılarım...

C# 7 ile gelen Yeni Özellikler

clock Eylül 4, 2017 17:23 by author Volkan Atasever

§  Out Anahtar Kelimesi

§  Pattern Matching

§  Switch Expression

§  Yerel Fonksiyonlar

§  Tuples

§  Binary Literal

§  Metotların Ref Döndürmesi

§  Throw Expression

 

Yerel Fonksiyonlar

C# 7 ile birlikte fonksiyon içinde fonksiyon tanımlayabilmemizin önü açıldı. Bu sayede artık yerel fonksiyonlar tanımlayabileceğiz.

 

public int fonksiyon1(int sayi1,int sayi2)

    {

        int fontsiyon(int sayi)

        {

                sayi++;

            return sayi*=sayi;

        }

     

        return fonksiyon(sayi1)+sayi2;

    }

 

Binary Literal

Bu özellikle birlikte sayısal ifadeler binary olarak tanımlanabilecek. Aynı zaman da digit ayraçlarıyla büyük sayıları binary veya heksadesimal olarak ayırabileceğiz. Bu daha kolay okuma da sağlayacaktır.

int sayi1 = 2_000_123;

int sayi2 = 0x3EEE_1111;

int sayi3 = 0b0001_1100_1111_0000;

var d = 123_456;

var x = 0xAB_CD_EF;

 

Metotların Ref Döndürmesi

Metotlara C# programlama dilinde ref değer gönderebiliyorduk. C# 7 ile beraber metotlar ref değeri de döndürebilecek. bu Referans tipi olarak dönmektedir.

public ref int Bul(int sayi, int[] sayilar)
{
    for (int i = 0; i < sayilar.Length; i++)
    {
        if (sayilar[i] == sayi) 
        {
            return ref sayilar[i]; 
        }
    }
    thrownew IndexOutOfRangeException($"{nameof(sayi)} bulunamadı!");
}

 

 

Out Anahtar Kelimesi

Out anahtar kelimesini kullanarak daha önce metotlara parametre geçirebiliyorduk. Out parametresi birden çok değer döndürmek istediğinizde oldukça popüler bir kullanıma sahiptir. bildiğiniz gibi out parametresi referans tipidir ve bir argüman olarak çalışmaktadır. Fakat out parametreye geçireceğiniz değişkeni daha önce tanımlamanız gerekmektedir.  C# 7 ile birlikte out parameteresi olarak değişkenleri aynı anda tanımlayabiliyoruz.

publicvoid KooridnatCiz(Point p)
{
    p.GetCoordinates(out int lang, out int long);
    WriteLine($"({lang}, {long})");
}

 

Out parametresinde değişken tanımlanın yanında var tipi değiştekde tanımlayabilirsiniz. Değişkenin kullanıdığı zaman sadece sınırlı kapsam içerdiğini dolayısıyla bunları metotun dışında kullanamayacağınızı unutmayın. Değişkeni doğrudan argüman olarak tanımlayabildiğimiz için C# 7 bunlarıda da var değer olarak tanımlamamıza izin verir. Dolayısıyla hangi tip değişken tanımladım diye kontrol yapmanıza gerek kalmaz. bildiğiniz gibi var tipi değişkenler dönüşebilmektedir.

 

p.KooridnatCiz(out var lang, out var long);

 

Pattern Matching

is anahtar kelimesi ile Pattern Matching özelliğini kullanabiliriz. Örneğin bir type pattern yaparak çalışma zamanında tipe göre işlem yapabiliriz.

publicvoid deneme(object o)
{
    if (o isnull) return;     // sabit pattern "null"
    if (!(o isint sayi)) return; // tip pattern "int sayi"
    WriteLine(new string('*', sayi));
}

 

Switch Expression

switch-case yapısı daha önceki c# programlama dili versiyonlarında oldukça sınırlıydı. Artık daha kompleks yapılar kurabiliyor ve null kontrolü, sınıf kullanımı gibi özellikleride switch- case yapımızda kullanabiliyoruz.

Örnek 1:

switch(sekil)

{

    case Daire c:

        WriteLine($"circle with radius {c.Radius}");

        break;

    case Ucgen s when (s.Length == s.Height):

        WriteLine($"{s.Length} x {s.Height} kare");

        break;

    case Ucgen r:

        WriteLine($"{r.Length} x {r.Height} üçgen");

        break;

    default:

        WriteLine("bilinmeyen şekil");

        break;

    casenull:

        thrownew ArgumentNullException(nameof(sekil));

}

 

Örnek 2:

public static int deneme(IEnumerable<object> values)

{

    var toplam = 0;

    foreach (var item in values)

    {

        switch (item)

        {

            case int val:

                toplam += val;

                break;

            case IEnumerable<object> altListe:

                toplam += deneme(altListe);

                break;

        }

    }

    return toplam;

}

Tuples

Tuples kullanımı eski bir kullanım olmasına rağmen c# 7 ile yenilenerek gelmiştir. tuple type ve tuple literal bir yenilik olarak karşımıza çıkmaktadır. Tuple tipleri değer tipi değişkenlerdir. System.Tuple isim alanını kullanmaktadır. Birden fazal değer döndürmek için Tuple kullanabilirsiniz. Birden fazla parametre olsa dahi tek nesne olarak işlem görmektedir. Çoklu değer döndürmek için out paramtresi tercih etmeden değer döndürebilirsiniz.

( string, string, string, string) getKisi()

{

    //Kişi bilgilerini veritabanından veya başka bir kaynaktan okuyabilirsiniz

    string strIsim = "Volkan";

    string strAdres = "Kadıköy";

    string strSehir= "İstanbul";

     return(strIsim, strAdres, strSehir); // tuple literal

}

 

//aşağıdaki metotu çağırdınızda çoklu değerleri döndürecektir.

 var kisiBilgi= getKisi();

WriteLine("Kisi bilgi:  {kisiBilgi .Item1} {kisiBilgi .Item2} {kisiBilgi .Item3}");

 

Yukarıdaki örnekte çoklu değerleri tuple kullanarak kolayca elde edebiliyoruz. Fakat item1,item2 isimleri alakası ve kafa karıştırıcıdır. bu yüzden anlamlı isimler kullanarak aşağıdaki örneği inceleyelim.

 

(string strIsim, string strAdr, string strSe) getKisi()

{

    //kodlarınızı buraya yazıyorsunuz

}

 

//metotu belirlenmiş ismi ile çağırdığınız zaman değerler aşağıda gözükecektir

var kisiBilgi= getKisi();

WriteLine("kisi bilgi: {kisiBilgi.strIsim} {kisiBilgi.strAdr} {kisiBilgi.strSe} ");

 

Bunlara ek olarak tüm değerleri Tuple Literal olarakta döndürebilirsiniz.

return (strIsim: strIsim, strAdr: strAdres, strSe: strSehir);

Tuple Hash tablosu veya Dictionary kullanarak kolayca değiştirebileceğiniz ve döndürebileceğiniz bir sisteme sahiptir. Tek durumda birden fazla değeri depoladığınız List yerinede kullanabilirsiniz. .NET üstünde bir Tuple tip tanımlıdır. Bu referans tipi bir değişkendir. C#ile gelen değiştirilebilir değer türü Tuple ise daha performanslıdır.

Bazı zamanlarda tüm tuple paketine ulaşmadan sadece değerlerine ihtiyacınız olabilir. O zaman C# 7 ile gelen Deconstruction özelliğini kullanarak istediğiniz parçayı oradan çekip alabilirsiniz.

( string strIsim,  string strAdr,  string strSe) = getKisi();

Console.WriteLine($"Adres: { strAdr }, Şehir: { strSe }");

 

Throw Expression

Bir try-catch yapısının herhangi bir yerinde throw kullanabilirsiniz. C# 7 ile istediğiniz bir yerde throw fırlatabilirsiniz.

class Kisi

{

    public string isim { get; }

    public Kisi(string isim_) => Name = isim_ ?? throw new ArgumentNullException(isim_);

    public string ilkismigetir()

    {

        var parts = isim.Split(" ");

        return (parts.Length > 0) ? parts[0] : throw new InvalidOperationException("isim yok!");

    }

    public string sonismigetir() => throw new NotImplementedException();

}



Cep Telefonu Şarjı ile Commodore 64 Çalıştırmak

clock Eylül 4, 2017 16:53 by author Volkan Atasever

Açıkcası bu benim yazım değil ve blogumda sadece kendi yazılarıma yer veririm genelde. Fakat iş retro bilgisayarlar olunca harika projeleri paylaşmadan edemiyorum. Commodore.gen.tr forumundan ilkerficicilar cep telefonu adaptörü ile Commodore 64 çalıştırmayı ufak bir kaç işlemle başarmış. hemde orjinal adaptörlerinin dev gibi olduğunu düşünürsek bence harika bir fikir.

Commodore 64 için piyasada adaptör azlığı sorunu malum.

Bu eksikliği, kolay ulaşılabilir parçalarla giderme yolunda ilk deneme şöyle:

Gerekenler:

. 5V 2A (veya daha amperli) USB şarj adaptörü.
. USB kablosu
. 7 uçlu DIN erkek fiş (C64 güç girişi)

Bendeki adaptör yüksüz ölçümde 5.6V veriyordu. C64'ün çipleri %5 esneme payıyla 5V ile çalışıyor. Ama şanslıyız ki C64'ün içinde bir 7805 regülatör entegresi var. Ona güvenerek devam ediyoruz.

USB kablolar genelde renk kodlu. Siyah renk 4 no'lu uca bağlı ve toprak. 1 no'lu uç ise kırmızı ve +5V taşıyor. Diğer ikisi beyaz ve yeşil veri ucu.

C64'ün güç giriş yuvasının en alt ucu olan 2 no'lu delik toprak. Hemen solundaki ise +5V.

ASCII çizimle:



  o   o
 o     o
  5   o
    0
 


Yukarıdaki kaba çizimde USB'nin siyah ucunu 0'la işaretlediğim deliğe, kırmızı ucunu da 5 ile işaretlediğim deliğe sokuyoruz.

7 uçlu DIN erkek fişin ise 2 (GND, siyah) ve 4 (+5V, kırmızı) no'lu pinlerine lehimlenecek.

Bu hızlı "olabilirlik" denemesindeyse kürdan saplama pratiği kullanılmıştır.

Fotoğrafları aşağıya ekledim.


Bir bilgi olarak: C64 9-12V olmadan da çalışıyor (SID hariç). C64'ün güç girişine uygun 7'li DIN erkek fiş ise elektronikçilerde kolayca bulunabiliyor.

Yukarıdaki ASCII çizimde verilen güç giriş şemasının en üstündeki iki giriş AC 9V için. Bu giriş içeride DC'ye çevrilip SID'e ve user port'a veriliyor.

9V hattı içeride rektifiye edildiği için kritik değil, ayrı bir adaptörden de giriş alınabilir ya da bir voltaj katlayıcı ile 5V, 10V'a çıkarılıp beslenebilir.

9-12V hattı AC değil DC olarak beslenirse sadece 6526'ların TOD saati çalışmıyor. Bu saat 50HZ'lik bir 'tik'le çalışıyor ve bu 50HZ de şebeke elektriğindeki dalgalanma frekansından temin ediliyor. Kritik değil. Ama 1997 yılında bir 555 entegresiyle bu frekansı üretip doğrudan C64'e vermiştim, şeması http://cbm.ficicilar.name.tr/ 'de bir yerlerde olacak.

Bu arada ben eski PC güç kaynaklarını da C64'te sorunsuz kullanmıştım. Üstelik switching PS olduklarından gayet güvenliler, sadece fazla büyükler.

Kısaca, bu denemeye göre cep telefonlarının o ufacık şarj adaptörleri kullanılarak C64'e ve 1541-II'ye uygun hesaplı bir adaptör geliştirilebilir.

Not: C64'ü açık bıraktım, yarım saattir parmak kadar şarj adaptörüyle sorunsuz 'şarj' oluyor Bence gideri var.

 

 

 



Yeni Şiirlerimden...

clock Temmuz 25, 2017 09:12 by author Volkan Atasever

Kibrit Kutusu isimli yeni şiirlerimden bir alıntı...

işte cenneti yarattık

10 dünya olmuş 1 metre olmuş

umrumda değil

cennetim seninle

bir kibrit kutusunda bile

sonsuza dek seninle



Ağlayan Yaşlı Çocuk Kitabımından...

clock Temmuz 20, 2017 21:11 by author Volkan Atasever

Ayrılış isimli şiirden...

artık intihar edeceğim biliyor musun

giderken demiştin korkak diye haykırıp

evet...

intihar bile etmeye korkan ben

seni sevdim ama sen gittin

 



Mahatma Gandhi'den oldukça güzel

clock Temmuz 12, 2017 07:18 by author Volkan Atasever

Tanrım! 
Güçlülerin yüzüne gerçeği söylemek için ve 
zayıfların alkışını ve sevgisini kazanmak için 
ve yalan söylememek için bana yardım et. 
Eğer bana para verirsen mutluluğumu alma 
ve eğer bana güçler verirsen muhakeme yeteneğimi çıkarma. 
Eğer başarı verirsen alçak gönüllüğü çıkarma. 
Eğer bana alçak gönüllüğü verirsen saygınlığımı çıkarma. 
Görünenin diğer yüzünü tanımama yardım et. 
Benim düşüncelerime katılmıyor diye bana karşı olanları hainlikle suçlayarak, 
onların karşısında suçlu duruma düşmeme izin verme. 
Kendimi sever gibi diğerlerini de sevmeyi 
ve diğerlerini yargılıyormuş gibi kendimi de yargılamayı öğret bana. 
Başarılı olduğum zaman sarhoşluğuma izin verme. 
Nede başarısız olursam olayım, umutsuzluğa düşmeme izin verme. 
Daha ziyade, başarısızlığı başarının öncesindeki bir deneme olduğunu hatırlamamı sağla. 

Hoşgörünün, güçlerin en büyüğü olduğunu 
ve intikam arzusunun zayıflığın ilk görünüşü olduğunu öğret bana. 
Eğer paradan yoksun bırakırsan, bana umudu bırak. 
Ve eğer beni başarıdan yoksun bırakırsan, 
başarısızlığı yenebilmek için irade gücünü bırak bana . 
Eğer beni sağlık bağışından yoksun bırakırsan, inancın lütfunu bana bırak. 
Eğer insanlara zarar verirsem, özür dileme gücünü ver bana . 
Ve eğer insanlar bana zarar verirse, affetme ve merhamet gücünü ver bana. 
Tanrım! Eğer ben seni unutursam sen beni unutma." 

Mahatma Gandhi



Volkan Atasever Kimdir ?

E-Mail: volkan(et)volkanatasever.com

Genel Müdür/S4G 
Bilgisayar Mühendisi

mühendislik, edebiyat, retro computer, yazılım, şiir, nümismatik, bilişim, podcast ve bir çok kategoride yazılarım...

Yazılım Kitaplarım

   

Şiir Kitaplarım

Ulusal Yayınlar ve Programlar

 

Sosyal Ağlarım

 

 

 

 

Retro Bilgisayar Dergimiz

Türkçe Retro Bilgisayar dergimiz haziran 2016'da ilk sayısını çıkardı. ilk sayı yeni bir internet sitesinden tekrar yayınlanacaktır. Retro camiası tüm dünyada oldukça eğlenceli bir camia. Sizde katkıda bulunmak isterseniz bana mail atmanız yeterli. Dergimiz PDF formatında ve tamamen ücretsizdir.

Yasal Bilgi

Sitedeki yazıları,kodlar ve diğer materyaller Volkan Atasever'e aittir. Yazarı ve siteyi kaynak göstererek yazıları paylaşabilirsiniz.  Copyright(c)2004-2017

Sign In

Yazılım