13/05/2023
من أكتر المشاكل المعروفة في لغات البرمجة ، بما فيهم Java ، هو وجود حاجة بتشاور على null لانه أكيد هيعمل Exception
لغة Kotlin بقا فرقت بين ال Referance اللي ممكن يكون null واللي ممكن ميكونش null، بنقول عليهم ( non null و nullable )
فمثلا :
لو عرفت متغير و حددت له ال data type سواء حطيت له قيمة او عملت له declare بس زي كدة var num : Int
مقدرش اخلي ال num يشاور على null لان ال default هنا انه non-null
عشان أخلي المتغير اللي معايا nullable هحط بعد ال data type دايما ؟ زي كدة
var num : Int? = 5
num = null
وبالتالي لو جيت اطبع num هيطبع null لكن لو حبيت استخدم num في اي حاجة تانية زي اني احوله ل long مثلا زي كدة
println( num.toLong( ) )
هلاقي syntax error لان فعلا num بيشاور ع فراغ سواء كنت عملت assign ل null بنفسي او لأ طالما اتعرف ع انه nullable
و عشان أحل المشكلة دي عندي كذا حل ...
1 - باستخدام if زي كدة مثلا
val num: Int? = null
if (num != null ) {
println( num.toLong( ) )
} else {
print( null )
}
ولكن kotlin بتقصر الاكواد بقدر الامكان ف عندنا حلين أقصر بكتير من دا ..
2-لما اتعامل مع num اكتب بعده ? دايما زي println( num?.toLong() )
و دي معناها انه لو مكانش null حوله ل long ولو كان null اطبع null
الحل ده اسمه safe call و من أحد مميزاته انه مفيد في ال chaining زي كدة
employee ?. dept ?. head ?. name
فالناتج من هنا هيكون null لو كان واحد منهم بيشاور ع null أيا كان مين هو.
كمان ممكن يستخدم مع ال method call زي كدة
person?.department?.head = managersPool.getManager()
" If either person or department is null, the function is not called "
3 - استخدم not null operator وهو اني لما استخدم num احط بعده !!
val num: Int? = 5
println(num!!.toLong())
والفرق بين الطريقة دي وبين ال safe call ان هنا بيحول أي قيمة إلى
non null
اما لو كان num بيشاور ع null هيطلع NullPointerException
4 - اخر طريقة معانا اسمها Elvis operator و بتكون على الشكل ده ( : ? ) و دي بتستخدم بدلا من if برضو لتقصير الكود، يعني بدل ما الكود يكون كدة
val a : Int = if (b != null) b.length else -1
ممكن يتكتب كدة
val a = b ?. length ?: -1
و دي معناها شوف لو كان b مش null هات الطول بتاعه
ولو الطول مكانش null خزن الطول في a و إلا خزن فيه -1
و سبب تسمية Elvis operator كدة هي ان علامة الاستفهام جنبها نقطتين شبه قصة شعر و عينين مغني اسمه Elvis Presley زي ما موجود في الكومنت كدا😂