Sayfayı Yazdır | Pencereyi Kapat

C# 7 deki bazı yenilikler ( Preview )

Nereden Yazdırıldığı: Datakent
Kategori: Diğer bölümler
Forum Adı: C# & ASP.NET
Forum Tanımlaması: C# ve ASP.NET ile ilgili soru / sorun ve paylaşım bölümü
URL: http://forum.datakent.com/forum_posts.asp?TID=2905
Tarih: 28.Mart.2024 Saat 14:25


Konu: C# 7 deki bazı yenilikler ( Preview )
Mesajı Yazan: murat turan
Konu: C# 7 deki bazı yenilikler ( Preview )
Mesaj Tarihi: 20.Eylül.2016 Saat 11:48
Yakında çıkacak olan Visual Studio 15'in yeni sürümü içerisinde bulunacak olan C# 7 serisinde şahsen sevdiğim bazı özellikler.


aşağıda göreceğiniz üzere ön tanım olmaksızın değişken tanımı. Eski serilerde int x, int y; şeklinde üst satırda tanım yapmak gerekiyordu.
public void PrintCoordinates(Point p)
{
    p.GetCoordinates(out int x, out int y);
    WriteLine($"({x}, {y})");
}

diğer bir yenilik fonksiyon veya procedur için OUT parametresinin iptal edilebilmesi. aşağıda göreceğiniz üzere "GetCoordinates"  iki parametreli bir yordamdır ve ikinci parametresi out * ile es geçilmiştir.

p.GetCoordinates(out int x, out *); // sadece x değişkeniyle dönecek değeri kullanmak istiyoruz.


diğer bir yenilik şart içerisinde tip kontrolü ve belirlenen tipte değişkene otomatik dönüşüm.
"o" değişkeni object türünde gelmektedir ve ikinci IF kısmında "o" nun INT olup olmadığı kontrol ediliyor ve akabinde "i" değişkenine "int" olarak atanabiliyor.
public void PrintStars(object o)
{
    if (o is null) return;     // constant pattern "null"
    if (!(o is int i)) return; // type pattern "int i"
    WriteLine(new string('*', i));
}


ve şahsen geldiğine en çok sevindiğim özellik ise Apple'ın Swift'inde mevcut olup Apple'ın bizde var onda yok diye övündüğü bir özellik :)  Tuples  yani çoklu değişken dönüşü
normalde çoklu değişken dönüşü yapmak istediğinizde bunu bir CLASS yaratıp orayla ilintilemeniz gerekirdi. Mesela düşünün bir fonksiyon yazdınız ve geriye "int x, int y" iki değer döndürecek. Bunun için bu iki değişkeni içeren bir CLASS yapıp fonksiyonun dönüşünüde bu CLASS tipinde yapardık değil mi? artık buna gerek kalmıyor. şöyle ki:

(string, string, string) LookupName(long id) // tuple return type
{
    ... // retrieve first, middle and last from data storage
    return (first, middle, last); // tuple literal
}
//kullanım olarak
var names = LookupName(id);
WriteLine($"found {names.Item1} {names.Item3}.");
ve elbette dönüş tipleri isim içerebilir. Şöyle ki:

(string first, string middle, string last) LookupName(long id) // tuple elements have names
ve tekrar kullanımına bakcak olursak

var names = LookupName(id);
WriteLine($"found {names.first} {names.last}.");

bu yapıdaki fonskyonlar için "var" ile tanım yapmadan, dönüş tipi biliniyorsa direkt değişken gruplarıylada dönüş değerleri okunabilir.

(string first, string middle, string last) = LookupName(id1); // deconstructing declaration
WriteLine($"found {first} {last}.");

Tuples için diğer dönüş formatları:

(var first, var middle, var last) = LookupName(id1); // var inside

var (first, middle, last) = LookupName(id1); // var outside

(first, middle, last) = LookupName(id1); // deconstructing assignment

ve diğer bir yenilik ise yerel fonksiyon. Pascal (delphi) de yıllardır mevcut olan yordam içi yordam yapısı c# 7 ile gelmektedir. Şöyle ki;
bakılacağı üzere "Fibonacci" ana yordamdır. İçerisindeki "Fib" ise içsel yordamdırç 
public int Fibonacci(int x)
{
    if (x < 0) throw new ArgumentException("Less negativity please!", nameof(x));
    return Fib(x).current;

    (int current, int previous) Fib(int i)
    {
        if (i == 0) return (1, 0);
        var (p, pp) = Fib(i - 1);
        return (p + pp, p);
    }
}



diğer bir yenilik ise "Ref returns" biraz c/c++ daki pointer olarak tanımlanmış değişken gibi denilebilir. şöyle ki;
Find "ref" dönüşü sağlayan bir fonksiyon
public ref int Find(int number, int[] numbers)
{
    for (int i = 0; i < numbers.Length; i++)
    {
        if (numbers == number) 
        {
            return ref numbers; // return the storage location, not the value
        }
    }
    throw new IndexOutOfRangeException($"{nameof(number)} not found");
}

int[] array = { 1, 15, -39, 0, 7, 14, -12 };
ref int place = ref Find(7, array); // place değişkenine 7'nin olduğu lokasyon yani dördüncü hücre atanıyor!!! burası önemli zira değeri değil !!!
place = 9; // dördüncü hücredeki 7 değeri 9 yapılıyor. yani "array" değişkenine genel bir bakış yaptığınızda değerin array'da değiştiğini görebilirsiniz.
WriteLine(array[4]); // array'ın dördüncü değerini yazdırıyoruz ki çıktı 9'dur.


ve visual studio enterprise 15 preview 4'ü indirmek için https://www.visualstudio.com/en-us/downloads/visual-studio-next-downloads-vs.aspx - tıklayınız...









-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil



Cevaplar:
Mesajı Yazan: murat turan
Mesaj Tarihi: 20.Eylül.2016 Saat 20:38
eğer VS 15'i kurarken "Windows 7 SP1 requires KB2952664" gibi bir hata alırsanız;

eğer sisteminiz 32Bit (x86) ise

%windir%\system32   klasörüne "dismapi.dll" adında boş bir DOSYA yaratınız.

eğer 64Bit (x64) bir sistem kullanıyorsanız aynı dosyayı %windir%\SysWow64  klasörüne oluşturunuz.

-------------
http://www.kasatakip.com - Kasa Takip  |  http://www.caritakip.com - Cari Takip  |  http://www.evraktakip.com - Evrak Takip  |  http://www.etasqlmobil.com - ETA SQL Mobil



Sayfayı Yazdır | Pencereyi Kapat