Equals ve Eşittir Karşılaştırma Operatörleri

Selamlar;

Herşeyin 1 ve 0 olduğu bir dünyada yaşıyoruz. Bugünkü konumuz true ve false yani comparison operators. Karşılaştırma operatörleri arasında farkların çoğunlukla karıştırıldığını ve hatta hepsinin aynı amaçlı kullanıldığının sanılması üzerine bu konuda makale yazmaya karar verdim.

eq1

(==) ve Equals() methodları’nın ikisi de farklı 2 değeri karşılaştırmak için kullanılır. (==) operator’ü 2 nesneyi karşılaştırırken, Equals() methodu nesnenin içerdiği string’i karşılaştırır. Yani kısaca (==) operatörü 2 nesnenin referans değerlerini karşılaştırırken Equals() methodu sadece içeriği karşılaştırır.

Aşağıdaki kod C#6.0 ile yazılmıştır. Eminim dikkatinizi çeken kayda değer bir farklılık vardır.” {0}” yerine direk yazılacak değer “\{..}” şeklinde yazılmıştır. Bu da yeni Roslyn ile bize gelen kolaylıklardan sadece biridir. Gelelim esas konumuza. Aşağıda 2 nesne hem içerik hem de referans olarak birbirinin aynı olduğu için 2’side true dur.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Equlizer
{
    class Program
    {
        static void Main(string[] args)
        {
            string message = "Is Equal";
            string operationMessage = message;
            Console.WriteLine("== operator kıyaslaması: \{message == operationMessage}");
            Console.WriteLine("Equals() method kıyaslaması: \{message.Equals(operationMessage)}");
            Console.WriteLine("");
            Console.WriteLine("*".PadLeft(20,'*'));
            Console.WriteLine("");
            Console.ReadLine();
        }
    }
}

1

Şimdi aşağıdaki örneği inceleyelim: values ve myBike nesneleri string değer olarak aynı oldukları için Equals() methodu sonucu true dönmüştür. Ancak referance değerleri bakımından birbirlerinden farklı oldukları için (==) sonucu false dönmüştür.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Equlizer
{
    class Program
    {
        static void Main(string[] args)
        {
           object motorbike = "kawasaki";
            char[] values = { 'k', 'a', 'w', 'a', 's', 'a', 'k', 'i' };
            object myBike = new string(values);
            Console.WriteLine("== operator kıyaslaması: \{ motorbike == myBike}");
            Console.WriteLine("Equals() method kıyaslaması: \{ motorbike.Equals(myBike)}");
            Console.WriteLine("");
            Console.WriteLine("*".PadLeft(20, '*'));
            Console.WriteLine("");
            Console.ReadLine();
        }
    }
}

2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Equlizer
{
    class Program
    {
        static void Main(string[] args)
        {
            string nullTest = "Is Null";
            string txtNull = null;
            Console.WriteLine("== operator kıyaslaması: \{nullTest == txtNull}");
            Console.WriteLine("Equals() method kıyaslaması: \{txtNull.Equals(nullTest)}");
            Console.ReadLine();
        }
    }
}

Yukarıdaki örnekte null değer atanmış txtNull değişkeni Equals() methodu ile karşılaştırılamaz ve hata döner. Çünkü bakılacak bir content yoktur.

error

Ama (==) karşılaştırmasında referance değerlerine bakıldığı için sorun yoktur ve sonuç tabiki aşağıdaki gibi false’dur.

result

Javascript’deki “==” ve “===” karşılaştırma operatörlernin farklarına gelin hep beraber bakalım: (==) operatörü ile code behind’daki durumun tam tersi olarak 2 değişkenin context değerlerine bakılırken (===) operatörü ile değişkenlerin referans değerlerine bakılır. Alttaki örneklerde bu konu ile ilgili açıklamalar detaylı olarak yapılmıştır.

eq2

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <script src="~/Scripts/jquery-2.1.3.min.js"></script>
    <script>
        $(document).ready(function () {
            $('#result').append("[0 == false] : " + (0 == false)); //true Çünkü aynı değere sahipler.
            $('#result').append("</br>[0 === false] : " + (0 === false)); //flase Çünkü farklı tipteler.
            $('#result').append('</br>[ 1 == "1"] : ' + (1 == "1")); //true Çünkü otomatik tip düzeltme var ve aynı değere sahipler.
            $('#result').append('</br>[ 1 === "1"] : ' + (1 === "1")); //false Çünkü farklı tipteler.
            $('#result').append('</br>[  null == undefined] : ' + (null == undefined)); //true Çünkü aynı değere sahipler.
            $('#result').append('</br>[ null === undefined] : ' + (null === undefined)); //false Çünkü farklı tipteler.
            $('#result').append("</br>[  '0' == false] : " + ('0' == false)); //true Çünkü otomatik tip düzeltme saysesinde aynı değere sahipler.
            $('#result').append("</br>[  '0' === false ] : " + ('0' === false)); //false Çünkü farklı tipteler.
           
            $('#result').append("</br>-----------------------------------------------");
            var a = [1, 2, 3];
            var b = [1, 2, 3];
            var c = a;

            var ab_isSame = (a === b); // false (a ve b aynı tipte olmalarına rağmen farklı nesnelerdir.)
            var ac_isSame = (a === c); // true (a ve c hem tipleri aynı hem de aynı nesnelerdir.)
            $('#result').append("</br> var a = [1, 2, 3];");
            $('#result').append("</br> var b = [1, 2, 3];");
            $('#result').append("</br> var c = a;");
            $('#result').append('</br>[ a === b] : ' + (a === b)); //false Çünkü farklı nesnelerdir.
            $('#result').append('</br>[ a === c] : ' + (a === c)); //true Çünkü aynı nesnelerdir.
            $('#result').append("</br>-----------------------------------------------");
            var a = new String("123")
            var b = "123";
            $('#result').append('</br> var a = new String("123")');
            $('#result').append('</br>  var b = "123"');
            $('#result').append('</br>[ a == b] : ' + (a == b)); //true Çünkü context string içerik aynıdır.
            $('#result').append('</br>[ a === b] : ' + (a === b)); //false Çünkü 2 farklı tipte nesnelerdir.

        });
    </script>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div id="result">
    </div>
</body>
</html>

result2

Yukarıdaki örneklerden de anlaşılacağı gibi karşılaştırma operatörlerinin kullanımı birbirine benzemesine karşın, aslında yaptıkları işler birbirinden çok farklıdır. Mesela code behind’da eğer sadece içeriğe bakılacak ise (==) operatör’ü yerine Equals() methodu kullanılmalıdır. Ama null kontrolü yapılması şarttır. “kawasaki” örneğinde olduğu gibi yanlış karşılaştırma operatör’ü kullanmak bizi yanlış sonuçlara götürecektir. Aynı şekilde Javascript’de işler biraz değişmekte ve (==) operatörü bu sefer nesnelerin içerdiği string’leri karşılaştırmaktadır. Aynı şekilde (===) operatörü ise içerik yerine nesnelerin kendisini kıyaslamaktadır.

Geldik bir makalenin daha sonuna. Umarım bu küçük ama önemli bilgiler işinize yarar.

Yeni bir makalede görüşmek üzere hoşçakalın.

Yazıyı beğendiyeseniz sosyal medyada paylaşabilirsiniz.

Yazar Hakkında

Avatar
Bora Kasmer

Yazılım Geliştirme Takım Lideri , Medyanet

cialis generic kamagra gel cheap cialis uk levitra uk cialis generic kamagra gel kamagra 100mg cheap cialis uk cheap levitra uk cheap cialis kamagra 100mg cialis tadalafil kamagra oral jelly cialis buy viagra generic levitra uk kamagra gel cialis generic cheap levitra cheap viagra uk

Yorumlar

Yorum Yazın

.com

Bülten Üyeliği

Güncel eğitim ve etkinliklerden ilk haberdar olmak için ücretsiz abone olun.

Login

Login olmak için kullanıcı adınızı ve şifrenizi giriniz.

Şifremi Unuttum

×

Hızlı İletişim

Her konuda bana yazabilirsiniz. En kısa zamanda cevap vereceğim.

×