What’s New in C# 6-Null Conditional Operator and Exception Filtering

Posted at : Sep/23/2016
650 Views | 0 Comments

Pada kesempatan kali ini saya akan membahas penggunaan null conditional operator dan exception filtering yang merupakan salah satu fitur baru di bahasa pemrogramman C# 6. Fitur exception filtering sebenarnya sudah ada di bahasa pemrograman VB.NET, namun di C# fitur tersebut baru ditambahkan oleh Microsoft di versi terbarunya yaitu versi 6. 

Null Conditional Operator

Untuk mengecek keberadaan sebuah object apakah null atau tidak biasanya dilakukan dengan menggunakan perintah if yang digabungkan dengan perintah != atau lengkapnya seperti berikut ini : if (obj != null). Namun di C# 6 statement tersebut dapat dipersingkat dengan menggunakan operator “?”. Operator tersebut juga dapat digabungkan dengan coalesce operator (“??”). Hasil dari sebuah ekspresi yang menggunakan operator null condition akan menghasilkan nilai null apabila memang hasilnya null (bukan null reference exception). Perhatikan contoh dibawah ini:

class OrderItem
{
    public string Item { get; set; }
    public int Qty { get; set; }
}
 
static string OrderAnItem(OrderItem order)
{
    if (order.Qty < 1) order = null;
    var item = order?.Item ?? "no item";
    var qty = order?.Qty.ToString() ?? "no quantity";

    return $"{item} with {qty} unit.";
}
 
Operator “?” setelah variabel order digunakan untuk mengecek apakah variabel tersebut null atau tidak, apabila tidak null maka proses selanjutnya yaitu membaca nilai properti dari object tersebut (untuk contoh diatas yaitu properti Item). Contoh diatas juga digabungkan dengan coalesce operator (“??”), sehingga apabila object order nya null maka nilai yang akan diberikan pada variabel item yaitu setelah simbol operator coalesce.
 
static void Main(string[] args)
{
    var order = new OrderItem { Item = "item-1" };
    var itemLine = OrderAnItem(order);
    WriteLine(itemLine);
    ReadLine();
}
 

Gambar tersebut diatas merupakan hasil dari pembuatan object OrderItem yang Qty nya tidak diberikan nilai (nilai default 0).

Operator null condition juga dapat digunakan untuk merujuk kepada item yang terdapat di dalam sebuah collection yang diakses melalui indexer nya.

static void CheckOrders(List<OrderItem> orders)
{
    var output = orders?.Count.ToString() ?? "no orders";
    WriteLine($"{output} item(s)");

    for(var i=0; i < orders?.Count; i++)
    {
        var qty = orders?[i].Qty;
        WriteLine($"{orders[i].Item} with {qty} unit");
    }
}

Perhatikan variabel qty di atas yang di assignment dengan orders?[i], artinya apabila variabel orders tidak null maka nilai dari item orders untuk indeks yang ke-i dapat diakses. Operator ini juga dapat digunakan dalam perintah looping untuk membatasi jumlah looping, hal ini secara tidak langsung dapat mencegah exception pada saat runtime apabila tidak dilakukan pengecekan null untuk variabel orders sebelum proses looping terjadi.

static void Main(string[] args)
{
    List<OrderItem> orders1 = null;
    CheckOrders(orders1);

    OrderItem order1 = new OrderItem { Item = "item-1", Qty = 1 };
    OrderItem order2 = new OrderItem { Item = "item-2", Qty = 2 };

    List<OrderItem> orders2 = new List<OrderItem> { order1, order2 };
    CheckOrders(orders2);

    ReadLine();
}
 

Variabel orders1 di setting ke null, namun pada saat variabel tersebut di masukkan kedalam prosedur CheckOrders hasilnya tidak mengalami runtime exception pada saat proses looping dilakukan karena adanya penggunaan operator null (“?”) didalam bagan looping tersebut.

Exception Filtering

Terkadang program membutuhkan skenario khusus yang spesifik dalam penggunaan structure exception handling. Misalnya exception hanya akan dibaca atau disimpan dalam log file apabila exception tersebut terjadi karena hanya diakibatkan oleh nilai exception tertentu seperti kode error, atau jenis exceptionnya. Perhatikan contoh berikut dibawah ini:

class MyCustomException : Exception
{

    public int ErrorCode { get; }

    public MyCustomException(int errorCode)
    {
        ErrorCode = errorCode;
    }

    public override string Message
    {
        get
        {
            var output = "";
            switch (ErrorCode)
            {
                case 101:
                    output = "Data tidak dapat disimpan.";
                    break;
                case 203:
                    output = "Data tidak dapat diupdate.";
                    break;
                case 359:
                    output = "Data tidak dapat dihapus.";
                    break;
            }
            return output;
        }
    }
}
 
Kode diatas adalah jenis custom exception yang menerima input kode error berupa nilai numerik tertentu. Message yang dihasilkan disesuaikan berdasarkan kode error yang diberikan kepada class exception tersebut. Berikut adalah contoh penggunaan exception filteringnya:
 
static void Main(string[] args)
{
    MyCustomException myExc = new MyCustomException(203);

    try
    {
        throw myExc;
    }
    catch (Exception ex) when (myExc.ErrorCode == 203)
    {
        WriteLine($"Error code: {myExc.ErrorCode}, {ex.Message}");
    }

    ReadLine();
}
 
Kode diatas memperlihatkan contoh penggunaan exception filtering dengan menggunakan perintah when setelah perintah catch untuk membatasi penggunaan catch tersebut pada saat logging atau menampilkan pesan error. Tentunya dengan when juga dapat digunakan untuk mengecek jenis exception yang terjadi, hal tersebut merupakan salah satu alternatif dalam penggunakan structure exception handling yang bertingkat.
 
 
Selamat mencoba 

[Comments]


[Write your comment]

Name (required)

Email (required-will not published)

 
Comment
TGYI
Input code above below (Case Sensitive) :

ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Founder & IT Trainer Native Enterprise | MCT (2008-2019) | MVP (2009-2016) | Xamarin Certified Professional | MTA | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.

[Read More...]

TOP DOWNLOAD

Mapping Hak Akses User Pada MenuStrip Sampai Control Button
downloaded 6982 times

Bagaimana caranya menginstal database ketika deploying sebuah aplikasi?
downloaded 4893 times

Simple Voice Engine Application With Sound Player Class...
downloaded 4045 times

Change Group,Sort Order, Filtering By Date in Crystal Reports
downloaded 3460 times

WinForms DataGrid Paging With SqlDataAdapter
downloaded 2881 times


LINKS

CERTIFICATIONS

Xamarin Certified
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2024   Rully Yulian MF   All rights reserved.