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

.NET Framework , Posted at : Sep/23/2016  
245 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

0237
Input code above below (Case Sensitive) :
About Me 
Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Microsoft Certified Trainer | IT Trainer at Native Enterprise | IT Consultant | Software Developer | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.
[Read More...]
Top Download 
Mapping Hak Akses User Pada MenuStrip Sampai Control Button : Downloaded 6083 times  
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 4689 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 3554 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 3324 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 2706 times  
Links 
Certifications 
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise 
Follow Me 
Facebook   LinkedIn   Twitter
Syndication 
Hosted By 
Native Enterprise News 
© Copyright 2006-2016   Rully Yulian MF   All rights reserved.