نتائج البحث

اذهب إلى التنقل اذهب إلى البحث

Python/types

تقدّم هذه الوحدة عددًا من الدوال المساعدة لإنشاء أنواع بيانات جديدة بصورة ديناميكية، إضافة إلى أنّها تعرّف أسماءً لبعض أنواع الكائنات التي يستخدمها مفسّر بايثون المعياري، ولكنّها ليست كائنات داخلية مثل int أو str، إلى جانب أنّ هذه الوحدة تقدم بعض الأصناف والدوال المساعدة الخاصة ببعض الأنواع، والتي لا تعدّ أساسية بما يكفي لتصبح أصنافًا ودوالّ داخلية. إنشاء الأنواع ديناميكيًا تقدّم هذه الوحدة ثلاث دوالّ تساعد في إنشاء أنواع البيانات ديناميكيًا: الدالة types.new_class()‎‎ تنشئ هذه الدالة ديناميكيًا كائن صنف باستخدام ...

أنواع البيانات (Data Types) في Kotlin

إن كلَّ عنصرٍ في Kotlin يعد كائنًا إذ يمكن استدعاء الدوال (member functions) والخاصّيّات (properties) عبر أي متغيِّر (variable)، ولبعض الأنواع تمثيلها الداخلي الخاص بها؛ فعلى سبيل المثال تُمثَّل الأعداد والمحارف والقيم المنطقية (boolean) كقيمٍ أساسيّةٍ أثناء التشغيل (runtime) ولكنها بالنسبة للمستخدم مجرّد أصنافٍ عادية، وتناقش هذه الصفحة الأنواع الرئيسيّة للبيانات في Kotlin وهي: الأعداد، والمحارف، والقيم المنطقية (boolean)، والمصفوفات، والسلاسل النصيّة. الأعداد (Numbers) تتعامل لغة Kotlin مع البيانات العدديّة بطريقةٍ مماثلةٍ للغة Java ولكن بفوارق بسيطة، فلا تدعم مثلًا ...

الصنف ‎:first-of-type

الصنف الزائف ‎:first-of-type في CSS (أي pseudo-class) يُمثِّل أوّل عنصر من نوعه في مجموعة من العناصر الأخوة. p:first-of-type { color: red; } ملاحظة: عندما عُرِّف هذا الصنف كان من الضروري أن يملك العنصر أبًا، لكن بدءًا من مواصفة Selectors Level 4 لم يعد ذلك ضروريًا. الشكل العام لهذا المحدد: :first-of-type أمثلة لاحظ كيف ستُنسَّق أوّل فقرة <p> من بين العناصر الأخوة: <h2>الترويسة</h2> <p>النص 1</p> <p>النص 2</p> شيفرة CSS: p:first-of-type { color: red; font-style: italic; } لاحظ كيف يمكن استخدام هذا المُحدِّد على العناصر المتشعبة، ...

الصنف :nth-of-type()

الصنف الزائف ‎:nth-of-type()‎ في CSS (أي pseudo-class) يُطابِق عنصرًا أو أكثر من نوعٍ معيّن بناءً على موقعه ضمن مجموعة من العناصر الأخوة (siblings). هذا المُحدِّد يُحدِّد جميع عناصر <p> التي ترتيبها هو الرابع ضمن أي مجموعة من الأخوة: p:nth-of-type(4n) { color: lime; } يقبل هذا الصنف الزائف وسيطًا واحدًا يمُثِّل نمط مُطابقة العناصر: الكلمة المحجوزة odd تُمثِّل العناصر التي يكون ترتيبها بين إخوتها فرديًا، أي 1 و 3 و 5 ...إلخ. ويبدأ العد من البداية إلى النهاية. الكلمة المحجوزة even تُمثِّل ...

الصنف ‎:last-of-type

الصنف الزائف ‎:last-of-type في CSS (أي pseudo-class) يُمثِّل آخر عنصر من نوعه في مجموعة من العناصر الأخوة. p:last-of-type { color: lime; } ملاحظة: عندما عُرِّف هذا الصنف كان من الضروري أن يملك العنصر أبًا، لكن بدءًا من مواصفة Selectors Level 4 لم يعد ذلك ضروريًا. الشكل العام لهذا المحدد: :last-of-type أمثلة لاحظ كيف ستُنسَّق آخر فقرة <p> من بين العناصر الأخوة: <h2>الترويسة</h2> <p>النص 1</p> <p>النص 2</p> شيفرة CSS: p:last-of-type { color: red; font-style: italic; } لاحظ كيف يمكن استخدام هذا المُحدِّد على العناصر المتشعبة، ...

الدالة type()‎ في بايثون

تعيد الدّالة type()‎ نوع الكائن المُعطى إن مُرّر مُعامل واحد لها. وتعيد كائن نوعٍ (type object) جديد إن مُرّرت لها ثلاثة مُعاملات. البنية العامة type(object) type(name, bases, dict) المعاملات تقبل الدّالة type()‎ إمّا مُعاملًا واحدًا فقط، أو ثلاثة مُعاملات كما هو واضح في البنية العامّة أعلاه. عند استدعائها بمُعامل واحد فقط، ستُعيد الدّالة نوع الكائن المُمرّر. أمّا عند الاستدعاء بثلاثة مُعاملات، فسيُعاد كائن نوعٍ جديد. وهو طريقة ديناميكيّة لإنشاء الأصناف كبديل للجملة class. object عند استدعائها بمُعامل واحد فقط، يُمثّل هذا ...

التسمية البديلة للأنواع (Type aliases) في لغة Kotlin

تدعم لغة Kotlin ميّزة التسمية البديلة للأنواع الموجودة للبيانات، وخاصّة إن كان اسم النوع طويلًا فيُستعاض عنه باسمٍ أقصرٍ ويُستخدَم الاسم الجديد في كتابة الشيفرات؛ فمن المفيد مثلًا تسمية الأنواع المُعمّمة (generics) بأسماء أقصرٍ، مثل الشيفرة الآتية المُستخدَمة لتسمية أنواع المجموعات (collections): typealias NodeSet = Set<Network.Node> typealias FileTable<K> = MutableMap<K, MutableList<File>> وبالإمكان أيضًا تسمية الأنواع المختلفة للدوال، مثل: typealias MyHandler = (Int, String, Any) -> Unit typealias Predicate<T> = (T) -> Boolean وكذلك الأمر بالنسبة للأصناف الداخليّة (inner classes) والمتداخلة (nested classes)، مثل: class ...

المُنشِئ الحافظ للنوع (Type-Safe Builder) في لغة Kotlin

المُنشِئ الحافظ للنوع (Type-Safe Builder) يُتاح بناءُ المُنشِئ الستاتيكيّ الحافظ للنوع في لغة Kotlin باستخدام الدوال ذات التسمية المعبِّرة كمُنشِئ (builder) بالإضافة إلى قيم حرفية (literals) للدوال مع المستقبِل (receiver)، إذ يسمح المُنشِئ الحافظ للنوع ببناء لغات مُخصَّصة المجال (DSL) بالاعتماد على Kotlin بما يتناسب مع إنشاء بُنى البيانات الهرميّة المعقَّدة بطريقةٍ نصف تصريحية (semi-declarative)، وهذه بعض الأمثلة من حالات استخدامه: توليد ترميزٍ (markup) باستخدام شيفرة Kotlin مثل HTML أو XML تصميم أجزاء واجهات المستخدم (UI) برمجيًا مثل Anko ضبط ...

الصنف ‎:nth-last-of-type()‎

الصنف الزائف ‎:nth-last-of-type()‎ في CSS (أي pseudo-class) يُطابِق عنصرًا أو أكثر من نوعٍ معيّن بناءً على موقعه ضمن مجموعة من العناصر الأخوة (siblings). بدءًا من النهاية إلى البداية. هذا المُحدِّد يُحدِّد جميع عناصر <p> التي ترتيبها هو الرابع ضمن أي مجموعة من الأخوة، والعد يبدأ من النهاية: p:nth-last-of-type(4n) { color: lime; } ملاحظة: هذا الصنف الزائف يماثل الصنف ‎:nth-of-type إلا أنه يبدأ عدّ العناصر من النهاية إلى البداية، عكس الصنف ‎:nth-of-type الذي يبدأ العد من البداية إلى النهاية. رجع صفحة الصنف ...

الخاصية list-style-type

الخاصية list-style-type في CSS تُحدِّد شكل الإشارة إلى عناصر القائمة. بطاقة الخاصية القيمة الابتدائية disc تُطبَّق على عناصر القوائم. قابلة للوراثة نعم قابلة للتحريك لا القيمة المحسوبة كما حُدِّدَت. /* قائمة مختصرة بأنواع الأشكال */ list-style-type: disc; list-style-type: circle; list-style-type: square; list-style-type: decimal; list-style-type: arabic-indic; /* <string> */ list-style-type: '-'; /* @counter-style rule */ list-style-type: custom-counter-style; list-style-type: none; /* القيم العامة */ list-style-type: inherit; list-style-type: initial; list-style-type: unset; ملاحظة: هذه الخاصية ستُطبَّق على عناصر القوائم، أي العناصر التي تكون قيمة الخاصية display فيها تساوي list-item، وهذا يتضمن العنصر <li> افتراضيًا؛ لكن لاحظ أنَّ قيمة ...

CSS/Topics/Data Type

نوع البيانات الوصف angle نوع البيانات <angle> في CSS يستعمل لتمثيل القيم الزاويّة بالدرجات (degrees) أو بالغراد (grad) أو بالراديان (radians) أو بالدورات (turns)، ويمكن استخدام هذا النوع في التدرجات اللونية <gradient> وبعض دوالtransform. blend-mode نوع البيانات <blend-mode> في CSS يستعمل لوصف كيف يجب أن تمتزج الألوان عند تداخل طبقات الخلفات مع بعضها بعضًا. فلكل بكسل من بكسلات الطبقة التي طُبِّق عليها نمط الامتزاج، فسيأخذ اللون من الخلفية ومن الأمامية، وستُجرى عملية حسابية عليه، ويُعاد لونٌ جديدٌ سيستخدم مكان تداخل الطبقات. color value نوع البيانات <color> في CSS ...

المحدد ‎‎‎:nth-of-type()‎‎ في jQuery

المحدد ()‎:nth-of-type الوصف يختار هذا المحدِّد عناصر ذات موقع محدد ضمن مجموعة من العناصر الأخوة (أي جميعها أبناء لعناصر أخرى) التي لها اسم العنصر ذاته. jQuery( ":nth-of-type(index/even/odd/equation)" )‎ أُضيف مع الإصدار: 1.9. index فهرس العنصر الابن المراد مطابقته، ويبدأ العد من القيمة 1 بدءًا من بداية المجموعة (أي فهرس أول عنصر في المجموعة هو 1). ويمكن استعمال الكلمة المحجوزة even التي تُمثِّل العناصر التي يكون ترتيبها بين إخوتها فرديًا، أو الكلمة المحجوزة odd التي تُمثِّل العناصر التي يكون ترتيبها بين ...

التحقق من الأنواع (Type Check) والتحويل بينها (Casting) في لغة Kotlin

المعاملين is و ‎!is تدعم لغة Kotlin ميّزة التحقُّق من توافق الكائن مع أحد الأنواع أثناء التنفيذ، وذلك بالاعتماد على المُعامِل is أو صيغته المنفيّة ‎!is كما في الشيفرة: if (obj is String) { print(obj.length) } if (obj !is String) { // !(obj is String) مكافئ للصيغة print("Not a String") } else { print(obj.length) } التحويلات الذكية (Smart Casts) لا حاجة في كثيرٍ من الأحيان لجعل التحويل صريحًا (explicit) في لغة Kotlin لأنّ المترجم (compiler) يتتبَّع ...

المحدد ‎‎‎:nth-last-of-type()‎‎ في jQuery

المحدد ()‎:nth-last-of-type الوصف يختار هذا المحدِّد عناصر ذات موقع محدَّد ضمن مجموعة من العناصر الأخوة (أي جميعها أبناء لعناصر أخرى) التي لها اسم العنصر ذاته وذلك بدءًا من نهاية المجموعة وحتى بدايتها. jQuery( ":nth-last-of-type(index/even/odd/equation)" )‎ أُضيف مع الإصدار: 1.9. index فهرس العنصر الابن المراد مطابقته، ويبدأ العد من القيمة 1 بدءًا من نهاية المجموعة (أي فهرس آخر عنصر في المجموعة هو 1). ويمكن استعمال الكلمة المحجوزة even التي تُمثِّل العناصر التي يكون ترتيبها بين إخوتها فرديًا، أو الكلمة المحجوزة odd ...

استخدام لغة Kotlin في نطاق JavaScript

تتيح لغة Kotlin إمكانيّة استهداف لغة JavaScript من خلال تحويل (transpiling) شيفرات Kotlin إلى ما يماثلها في JavaScript ؛ إذ تستهدف بالوقت الحاليّ معيارECMAScript 5.1، ومن المُخطَّط له أيضًا التوافق مع معيار ECMAScript 2015 لاحقًا. عند استخدام لغة Kotlin بهدف كتابة شيفرات JavaScript فستُحوَّل الشيفرات المكتوبة بلغة Kotlin (بعدِّها جزءًا من المشروع والمكتبة القياسيّة في Kotlin) إلى شيفرة JavaScript، ولكنّ هذا لا يشمل أيًّا ممّا يتعلَّق ببيئة JDK أو JVM أو Java أو أيّ من منصّاتها أو مكتباتها المُستخدَمة، ويُستبعَد ...

الدالة ‎‎asDynamic()‎ في Kotlin

تعيد الدالة asDynamic()‎ قيمة الكائن الذي استدعيت عبره على شكل قيمةٍ من النوع الديناميكي (dynamic type)، الذي يُسمَح بإسناده إلى أي متغيّر أو تمريره كمتغيّر وسيط (argument) أيًّا كان نوعه. بيئة التشغيل المطلوبة:  JS البنية العامة inline fun Any?.asDynamic(): dynamic يُلاحَظ وجود الكلمة المفتاحية inline للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions). القيم المعادة تعاد قيمة من النوع الديناميكي (dynamic type). انظر أيضًا الدوال المباشرة (inline functions) في لغة Kotlin. مصادر صفحة الدالة ...

الدالة ‎‎asDynamic()‎ في Kotlin

تعيد الدالة asDynamic()‎ قيمة الكائن الذي استدعيت عبره على شكل قيمةٍ من النوع الديناميكي (dynamic type)، الذي يُسمَح بإسناده إلى أي متغيّر أو تمريره كمتغيّر وسيط (argument) أيًّا كان نوعه. بيئة التشغيل المطلوبة:  JS البنية العامة inline fun Any?.asDynamic(): dynamic يُلاحَظ وجود الكلمة المفتاحية inline للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions). القيم المعادة تعاد قيمة من النوع الديناميكي (dynamic type). انظر أيضًا الدوال المباشرة (inline functions) في لغة Kotlin. مصادر صفحة الدالة ...

المقارنة بين لغتيّ البرمجة Java و Kotlin

بعض المواضيع في Java ومعالجتها في Kotlin عالجت لغة Kotlin العديد من المشاكل الموجودة في Java وهي: التحكُّم بالمرجعيّات الفارغة (null references) عبر نظام الأنواع لا وجود للأنواع الخامّ (raw types) تُعدُّ المصفوفات في Kotlin ثابتة (invariant) للدوال (functions) في Kotlin أنواع مناسبة وهذا ما يتعارض مع التحويلات SAM في Java التنوّع في موقع الاستخدام (use-site variance) دون الحاجة إلى المحارف البديلة (wildcards) لا وجود للاستثناءات المُتحقَّق منها (checked exceptions) في Kotlin ما تمتاز به Java ولا تدعمه Kotlin الاستثناءات ...

Kotlin/Topics

بُنية لغة Kotlin مشابهةٌ لبنية لغة البرمجة Java بوصفها كائنيّة التوجه (OOP)، وبالتالي فهي تعتمد أساسًا على وجود الأصناف (classes) التي تحتوي بدورها على الخاصّيّات (properties) والدوال (functions)، كما وتدعم Kotlin العلاقات فيما بينها مثل الوراثة (inheritance) من صنفٍ أعلى (superclass) أو التداخل فيما بينها (nesting classes)، وتمتاز بوجود مُحدِّدات الوصول (visibility modifiers) للتحكم بعمليات الوصول للبيانات المُخزَّنة، وكذلك فهي تعتمد في بُنيتها على الحزم (packages) والمكتبات (libraries) التي تحتوي على الدوال المساعدة عند الحاجة إليها، أمّا عن بُنية التعليمات ...

الدالة ‎‎iterator()‎ في Kotlin

تسمح الدالة iterator()‎ بالتكرار (iterate) على كائنٍ ديناميكيّ (dynamic) في الحالات الآتية: إن كان لديه دالة تكراريّة (iterator function). إن كان مصفوفةً (array). إن كان نسخةً (instance) من Kotlin.collections.Iterable. البنية العامة operator fun dynamic.iterator(): Iterator<dynamic> بيئة التشغيل المطلوبة: JS. ويُلاحظ وجود الكلمة المفتاحيّة operator للدلالة على أنّ هذه الدالة مرتبطٌ بمعامل التكرار (iteration operator). انظر أيضًا الدالة ()asDynamic: تعيد قيمة الكائن الذي استدعيت عبره على شكل قيمةٍ من النوع الديناميكيّ (dynamic type). مصادر صفحة الدالة iterator()‎ في التوثيق الرسميّ للمكتبة القياسيّة ...

الدالة ‎‎iterator()‎ في Kotlin

تسمح الدالة iterator()‎ بالتكرار (iterate) على كائنٍ ديناميكيّ (dynamic) في الحالات الآتية: إن كان لديه دالة تكراريّة (iterator function). إن كان مصفوفةً (array). إن كان نسخةً (instance) من Kotlin.collections.Iterable. البنية العامة operator fun dynamic.iterator(): Iterator<dynamic> بيئة التشغيل المطلوبة: JS. ويُلاحظ وجود الكلمة المفتاحيّة operator للدلالة على أنّ هذه الدالة مرتبطٌ بمعامل التكرار (iteration operator). انظر أيضًا الدالة ()asDynamic: تعيد قيمة الكائن الذي استدعيت عبره على شكل قيمةٍ من النوع الديناميكيّ (dynamic type). مصادر صفحة الدالة iterator()‎ في التوثيق الرسميّ للمكتبة القياسيّة ...

الدالة ‎‎unsafeCast()‎ للتحويل غير الآمن بين الأنواع في Kotlin

يحوِّل المعامل as الكائن الذي استُدعي عبره إلى نوعٍ  آخر (T) بشكلٍ غير آمن (unsafe) أي بدون التحقُّق من الأنواع، فإن  كان التحويل غير جائزٍ، فسيُعلِم المُترجم بوجود خطأٍ، ويعبِّر المعامل as عن استدعاء الدالة unsafeCast()‎ التي تجري عملية التحويل الفعليّ. البنية العامة inline fun <T> Any?.unsafeCast(): T يُلاحَظ وجود الكلمة المفتاحية inline للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions). القيم المعادة تعاد قيمة الكائن (object) بعد تحويله إلى النوع الآخر المُحدَّد (T). ...

الدالة ‎‎unsafeCast()‎ للتحويل غير الآمن بين الأنواع في Kotlin

يحوِّل المعامل as الكائن الذي استُدعي عبره إلى نوعٍ  آخر (T) بشكلٍ غير آمن (unsafe) أي بدون التحقُّق من الأنواع، فإن  كان التحويل غير جائزٍ، فسيُعلِم المُترجم بوجود خطأٍ، ويعبِّر المعامل as عن استدعاء الدالة unsafeCast()‎ التي تجري عملية التحويل الفعليّ. البنية العامة inline fun <T> Any?.unsafeCast(): T يُلاحَظ وجود الكلمة المفتاحية inline للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions). القيم المعادة تعاد قيمة الكائن (object) بعد تحويله إلى النوع الآخر المُحدَّد (T). ...

الصنف ‎‎Function‎ في Kotlin

تمثل الواجهة Function قيمةً لنوع وظيفي (functional type) -مثل تعبير lambda-، أو دالة مجهولة، أو مرجع دالة. interface Function<out R> إذ يعيد المعامل R نوع الدالة. الدوال الموروثة equals تتحقق الدالة equals()‎ إذا ما كان الكائن المُمرّر إليها يساوي الكائن الذي استدعيت معه. وأيُّ تعريف لاستخدام هذه الدالة يجب أن يكون: hashCode تعيد الدالة hashCode()‎ الشيفرة Hash الخاصّة بالكائن الذي استُدعي معها. تُحقِّق هذه الدالة الشرطين الآتيين دائمًا: toString تحول الدالة toString()‎ الكائن الذي يُستدعى معه إلى سلسلة نصية (String). الدوال الإضافية (Extension Functions) reflect ...

الاستثناءات (Exceptions) في لغة Kotlin

أصناف الاستثناءات (Exception Classes) تنحدر كلّ أصناف الاستثناءات في لغة Kotlin من الصنف Throwable حيث يوجد لكلِّ استثناءٍ رسالةٌ للإعلام به وتتبُّع تكديسي (stack trace) وسببٌ اختياريّ. ويُستخدَم التعبير throw لرمي كائن استثناءٍ بالشكل: throw MyException("Hi There!") أمّا تعبير try فهو مُستخدَمٌ لكشف الاستثناء كما في الشيفرة: try { // شيفرة } catch (e: SomeException) { // معالجات الاستثناء } finally { // قسم اختياريّ } ومن الممكن أن يحتوي الاستثناء أكثر من قسمٍ واحدٍ من catch أو ...

الأنواع المُعمَّمة (Generics) في لغة Kotlin

معاملات الأنواع (Type Parameters) قد تحتوي الأصناف (classes) -كما هو الحال في لغة Java- على معاملات للأنواع (type parameters) مثل: class Box<T>(t: T) { var value = t } ولإنشاء كائنٍ (instance) من هذا الصنف يجب تحديد النوع كما في الشيفرة الآتية: val box: Box<Int> = Box<Int>(1) أمّا إن كان بالإمكان معرفة (infer) المعاملات إمّا من خلال معاملات الباني (constructor arguments) أو بأيّ وسيلةٍ أخرى فيمكن حينئذٍ حذف نوع المعاملات، مثل: val box = Box(1) // القيمة 1 لها ...

المجالات (Ranges) في لغة Kotlin

استخدام المجالات تُصاغُ تعابير المجالات (range expressions) من خلال دوال rangeTo التي تعتمد على المعامل .. والذي بدوره يتُمَّم بالمعاملين inو ‎!in، إذ من الممكن أن يُعرَّف المجال لأيّ نوعٍ يقبل المقارنة، أما في حالة الأنواع الأساسيّة المتكاملة (integral primitive types) فلها تعريف استخدام مُحسَّن (optimized)، وهذه بعض الأمثلة: if (i in 1..10) { // مكافئ للصياغة // 1 <= i && i ...

تبديل رموز الأنواع بالأصناف (Replace Type Code with Class)

ما هو رمز النوع (type code)؟ يحدث رمز النوع عندما يوجد مجموعة من الأرقام أو السلاسل النصية التي تشكل قائمة بالقيم المسموح بها لبعض العناصر بدلًا من استخدام نوع بيانات منفصل. غالبا ما تُعطى هذه الأرقام والسلاسل المحددة أسماءً مفهومة عن طريق الثوابت، وهو السبب في استخدام هذه الرموز بشكل كبير. المشكلة يحتوي الصنف على حقل يحتوي على رموز الأنواع. ولا تُستخدم قيم هذا النوع في شروط المُشغِّل ولا تؤثر على سلوك البرنامج. الحل إنشاء صنف جديد واستخدام كائناته بدلًا ...

الصنف ‎‎Any‎‎ في Kotlin

يعد الصنف Any الجذر الرئيسيّ في الهرميّة العامّة لأيّ صنفٍ مُستخدَمٍ في Kotlin؛ أي أنّ كلَّ صنفٍ سيكون له الصنف الأعلى (superclass)‏ Any. open class Any الدوال البانية <int> يعيد التابع Any()‎ نسخةً من الصنف Any الذي هو الجذر الرئيسيّ في الهرميّة العامّة لأيّ صنفٍ مُستخدَمٍ أثناء البرمجة في Kotlin؛ أي أنّ كلَّ صنفٍ سيكون له الصنف الأعلى (superclass)‏ Any. الدوال equals تتحقق الدالة equals()‎ إذا ما كان الكائن المُمرّر إليها يساوي الكائن الذي استدعيت معها. hashCode تعيد الدالة hashCode()‎ قيمة الشيفرة hash code الخاصّة بالكائن الذي ...

التساوي (Equality) في لغة Kotlin

تحتوي لغة Kotlin على نوعين من التساوي: التساوي البنيويّ (structural equality): يكون التحقُّق فيه عبر الدالة equals()‎. التساوي المرجعيّ (referential equality): وهو التحقُّق من الإشارة إلى نفس الكائن (object). التساوي البنيويّ (Structural Equality) يعتمد التساوي البنيويّ على المعامل == ونفيه =! ، إذ يُترجَم التعبير a == b إلى الصيغة: a?.equals(b) ?: (b === null) فإن لم يحتوِ المتغيِّر a على القيمة الفارغة null فستُستدعَى الدالةequals(Any?)‎ ، أما إن كانت قيمته null فيجري التحقُّق من أنّ b مساوٍ -مرجعيًّا- للقيمة null. ...

الخاصّيّات المُعمَّمة (Delegated Properties) في لغة Kotlin

 استخدام الخاصّيّات المُعمَّمة تستطيع في لغة Kotlin تعريف استخدام (implement) الخاصّيّات يدويًا مرارًا وتكرارًا بكل مرةٍ تحتاجها، ولكن من الأسهل تعريف استخدامها مرةً واحدةً وتخزين هذا التعريف في المكتبة (library) للاستفادة منه كلما دعت الحاجة، وهذا يشمل: الخاصّيّات الكسولة (Lazy property): تُحسب قيمتها مرةً واحدةً فقط وذلك عند الوصول إليها للمرّة الأولى. الخاصّيّات المُراقَبة (observable property): إذ يُستدعَى مسؤول الانتظار (listener) عند حدوث أي تغييرٍ في الخاصّيّة. تخزين الخاصّيّات في map بدلًا من حقلٍ منفصلٍ لكلِّ منها. وتشمل لغة Kotlin ...

أمان القيم الفارغة (Null) في لغة Kotlin

الأنواع Nullable والأنواع Non-Null يهدف نظام الأنواع في Kotlin إلى الحدِّ من أخطار القيمة الفارغة null في الشيفرات، إذ إنّ أحد الأخطاء الأكثر شيوعًا في لغات البرمجة -بما فيها لغة Java- هو أنّ محاولة الوصول إلى مرجعيّةٍ تحتوي على القيمة null سيؤدي إلى حدوث استثناءٍ مرجعيّ (reference exception)، ويُدعى هذا الاستثناء في لغة Java باسم NullPointerException أو NPE اختصارًا، أمّا Kotlin فهي تحدُّ من هذا الاستثناء ليقتصر على الحالات الآتية: استدعاءٌ صريحٌ بالشكل: throw NullPointerException()‎ استخدام المعامل !! (كما سيُشرح لاحقًا) ...

استخدام لغة Kotlin في تطوير تطبيقات الخادم (Server)

تُعدّ لغة Kotlin أداةً قويةً في تطوير تطبيقات الخادم (server)؛ إذ تكون الشيفرات فيها دقيقةً ومعبِّرة، وتمتاز بالتوافقيّة التامّة مع لغة Java ومن السهل تعلُّمها بسرعة. ميزات استخدام لغة Kotlin لتطوير تطبيقات الخادم (Server) القدرة على التعبير (Expressiveness): تساعد مميّزات لغة Kotlin المبتكرَة (مثل دعمها للمنشِئ الحافظ للنوع (type-safe builder) والخاصّيات المُعمّمة (delegated properties)) على إنشاء البنى التجريديّة (abstraction) سهلةِ الاستخدام. قابلية التوسّع (Scalability): تدعم لغة Kotlin ميّزة الروتينات المساعدة (coroutines)، وهي بهذا تتيح -في تطبيقات الخادم- إمكانيّة التوسّع لعددٍ ...

تبديل رموز الأنواع بالأصناف الفرعية (Replace Type Code with Subclasses)

ما هو رمز النوع؟ يحدث رمز النوع عندما يوجد مجموعة من الأرقام أو السلاسل النصية التي تشكل قائمة بالقيم المسموح بها لبعض العناصر بدلًا من استخدام نوع بيانات منفصل. وغالبًا ما تُعطَى هذه الأرقام والسلاسل المحددة أسماءً مفهومة عن طريق الثوابت، وهو السبب في استخدام هذه الرموز بشكل كبير. المشكلة يؤثر النوع المُرمَّز على سلوك البرنامج (تُطلِق قيم هذا الحقل رموز مختلفة في الشرطيات). الحل إنشاء أصناف فرعية لكل قيمة من النوع المُرمَّز. ثم استخراج السلوكيات ذات الصلة من الصنف ...

أصناف الثوابت المُتعدِّدة (Enum Classes) في لغة Kotlin

يتلخَّصُ الاستخدام الرئيسيّ لأصناف الثوابت المتعدَّدة في قدرتها على تعريف الاستخدام (implementing) للثوابت المتعدًّدة الحافظة للنوع (type-safe)، ويُصرَّح عنها بالشكل: enum class Direction { NORTH, SOUTH, WEST, EAST } إذ يُعدُّ كلُّ ثابتٍ فيها كائنًا (object)، ويُفصل فيما بينها بالفاصلة , . التهيئة (Initialization) لمّا كان كلّ ثابتٍ في صنف الثوابت المتعدِّدة (enum) يُعدُّ كائنًا فيمكن إجراء التهيئة كما يلي: enum class Color(val rgb: Int) { RED(0xFF0000), ...

الدوال (Functions) في لغة Kotlin

التصريح عن الدوال (Function Declarations) يُصرَّح عن الدوال في لغة Kotlin باستخدام الكلمة المفتاحيّة fun كما يلي: fun double(x: Int): Int { return 2 * x } استخدام الدوال (Function Usage) يكون استدعاء الدوال كما في أيّ لغة برمجةٍ أخرى بالشكل: val result = double(2) أمّا استدعاء الدوال من الأصناف فيعتمد على المعامل . كما في الشيفرة: Sample().foo() // إنشاء كائنٍ من الصنف واستدعاء الدالة عبره المعاملات (Parameters) تُعرَّف المعاملات بالصيغة المُعتمدَة في لغة Pascal وهي name: type ، ...

أسئلة شائعة عن لغة Kotlin

ما هي لغة Kotlin؟ تُعدُّ Kotlin إحدى لغات البرمجة مفتوحة المصدر (OSS) والمكتوبة ستاتيكيًّا، وتستهدف كلًا من بيئة JVM و Android و JavaScript و Native، وقد طُوِّرت من قِبل شركة JetBrains بدءًا من العام 2010 حيث كانت مفتوحة المصدر منذ بداياتها الأولى، ونٌشر الإصدار الرسميّ Kotlin 1.0 في الشهر الثاني (شباط) من عام 2016. ما النسخة الحاليّة للغة Kotlin؟ نٌشر الإصدار الأخير للغة Kotlin في الأوّل من الشهر الثالث (آذار) من عام 2018 وهو الإصدار Kotlin 1.2.30. هل Kotlin مجانيّة؟ ...

الإضافات (Extensions) في لغة Kotlin

الإضافات (Extensions) توفِّر لغة Kotlin -كما هو الحال في لغات البرمجة مثل C#‎ و Gosu- إمكانيّة الإضافة على الأصناف (classes) بوظائف جديدةٍ دون اللجوء إلى الوراثة (inheritance) منها أو استخدام أيّ أنماطٍ تصميميّةٍ مثل Secorator، وذلك من خلال تصريحات خاصّة تُدعى الإضافات (extensions)، إذ تدعم لغة Kotlin الدوال الإضافيّة (extension functions) والخاصّيّات الإضافيّة (extension properties). الدوال الإضافيّة (Extension Functions) لتعريف دالةٍ إضافيّةٍ يجب أن يُسبَق اسمها بنوع المستقبِل (receiver type) أي النوع الذي ستتمّ الإضافة عليه، ففي الشيفرة الآتية تُضاف ...

الكلمات المفتاحية (Keywords) والمعاملات (Operators) في لغة Kotlin

 الكلمات المفتاحيّة الثابتة (Hard Keywords) تُعدُّ الكلمات الآتية كلماتٍ مفتاحيّةً في لغة Kotlin وليس ممكنًا استخدامها كمُعرِّفات (identifiers): as تُستخدَم في التحويلات ما بين الأنواع (typecasts) تُحدِّد تسميةً بديلةً (alias) عند عملية الاستيراد (import) as?‎ للتحويلات الحافظة للنوع (safe type casts) break لإنهاء تنفيذ الحلقات (loops) class للتصريح عن الأصناف continue  للاستمرار بالخطوة التالية لأقرب حلقة محيطة (enclosing) do للبدء بحلقة do/while (والتي يُختبَر الشرط فيها لاحقًا) else لتعريف فرعٍ (branch) من تعبير الشرط if والذي سيُنفَّذ عندما يكون الشرط بالقيمة false false ...

بنية البرمجة في لغة Kotlin

تعريف الحزم (Package) يُكتب توصيف الحزمة (package) في بداية الملف المصدريّ (source file) بالشكل الآتي: package my.demo import java.util.* // ... ولا يُشترط التوافق ما بين الحزمة (package) والمجلد الذي توجد فيه (directory)، إذ من الممكن أن تتوضع الملفات المصدريّة عشوائيًّا في نظام الملفات. المزيد عن الحزم (packages). تعريف الدوال (Function) إن كانت الدالة بمتحولين من نوع Int وتعيد قيمةً بنوع Int أيضًا، فسيصبح تعريفها بالشكل: fun sum(a: Int, b: Int): Int {   return a + b } أما الشيفرة الآتية فهي لتعريف دالةٍ باسم sum ...

تبديل رموز الأنواع بالحالة/الاستراتيجية (Replace Type Code with State/Strategy)

ما هو رمز النوع؟ يحدث رمز النوع عندما يوجد مجموعة من الأرقام أو السلاسل النصية التي تشكل قائمة بالقيم المسموح بها لبعض العناصر بدلًا من استخدام نوع بيانات منفصل. وغالبًا ما تُعطَى هذه الأرقام والسلاسل المحددة أسماءً مفهومة عن طريق الثوابت، وهو السبب في استخدام هذه الرموز بشكل كبير. المشكلة يؤثر نوع مُرمَّز على سلوك البرنامج ولكن لا يمكن استخدام الأصناف الفرعية للتخلص منه. الحل استبدال رمز النوع بكائن حالة. إذا كان من الضروري استبدال قيمة حقل برمز النوع، فسيكون ...

التحميل الزائد للمعاملات (Operator Overloading) في لغة Kotlin

تُتيح لغة Kotlin إجراءَ مجموعةٍ مُعرَّفة مسبقًا من العمليات على أنواع البيانات المختلفة وذلك باستخدام رموزٍ ثابتةٍ تعتمدها لغة Kotlin مثل الرمز + أو الرمز * وتختلف فيما بينها بالأولويّة (precedence)، حيث توجد دالةٌ (إما دالة من الصنف [member] أو دالة إضافيّة [extension]) باسمٍ ثابتٍ لكلّ معاملٍ مُعرَّف بحسب النوع (نوعٌ يساريٌّ للعمليات الثنائيّة [binary operations] ونوع وسائط [argument type] للعمليات الأحاديّة [unary operations])، ويجب تحديد الدوال التي تحتوي على تحميلٍ زائدٍ للمعاملات بالمُحدَّد operator، تناقش الصفحة الاصطلاحات (conventions) التي ...

أوامر الرجوع (Returns) والقفز (Jumps)

تعابير القفز تمتاز لغة Kotlin بوجود ثلاثة تعابير (expressions) لنقل سياق البرنامج وهي: return: للرجوع من أقرب دالةٍ محيطةٍ (enclosing) أو دالةٍ مجهولةٍ (anonymous function). break : تنهي أقرب حلقةٍ محيطة. continue : تستمر بالخطوة التالية لأقرب حلقةٍ محيطة. إذ يُسمَح باستخدام أيّ من التعابير السابقة كجزءٍ من تعبيرٍ أكبر، مثل: val s = person.name ?: return ونوع هذه التعابير هو Nothing type. تسمية الأوامر Break و Continue يٌتاح في لغة Kotlin تحديد تسميةٍ (label) لأيّ تعبير، إذ تتألف هذه التسمية من مُحدِّدٍ ...

التحكم بالتدفق (Control Flow) في Kotlin

كما في أيّة لغة برمجة فإن لغة Kotlin تحتوي على تعابير للتحكم بالتدفق، وهي: تعبير if، وتعبير when، وحلقة for، وحلقة while. وتدعم كذلك الكلمتين المفتاحيّتَين continue و break المستخدَمتَين في الحلقات (راجع أوامر الرجوع والقفز returns and jump). تعبير if يُعدُّ الشرط if في لغة Kotlin تعبيرًا يعيد قيمة، وبالتالي لا حاجة للصيغة condition ? then : else لأن تعبير if يقوم بهذا الدور كما في الشيفرة الآتية: // الاستخدام الاعتيادي var max = a if (a < b) max = b // ...

الدالة not()‎ في Kotlin

تعكس الدالة not()‎ القيمة المنطقيَّة المستدعاة معها. يمكن استعمال المعامل ! عوضًا عن هذه الدالة. البنية العامة operator fun not(): Boolean المعاملات other القيمة المنطقية الأخرى التي ستطبق عليها العملية. القيمة المعادة يعاد عكس القيمة المنطقية المعطاة. أمثلة استخدام الدالة ()not لعكس قيمة منطقية معينة: fun main(args: Array<String>) { val x = true println(x.not()) // false println(!x) // false } انظر أيضًا الدالة and()‎: تجري العملية and المنطقية ...

الدالة or()‎ في Kotlin

تجري الدالة or()‎ العملية or المنطقية بين قيمتين منطقيتين؛ خلافًا للمعامل ||، تتحقق هذه الدالة من كلا القيمتين المنطقيتين. البنية العامة infix fun or(other: Boolean): Boolean وجود الكلمة المفتاحية infix يدل على أنَّ هذه الدالة يمكن استدعاؤها بنمط التدوين الداخليّ (infix notation)؛ أي من خلال حذف المعامل . والأقواس () المُستخدَمَين في الاستدعاء عادةً. المعاملات other القيمة المنطقية الأخرى التي ستطبق عليها العملية. القيمة المعادة تعاد قيمة منطقية تكون ناتج إجراء العملية or على القيمتين المعطيتين. أمثلة استخدام الدالة ()or لتطبيق العملية or على قيمتين منطقيتين: fun ...

الدالة and()‎ في Kotlin

تجري الدالة and()‎ العملية and المنطقية بين قيمتين منطقيتين؛ خلافًا للمعامل &&، تتحقق هذه الدالة من كلا القيمتين المنطقيتين. البنية العامة infix fun and(other: Boolean): Boolean وجود الكلمة المفتاحية infix يدل على أنَّ هذه الدالة يمكن استدعاؤها بنمط التدوين الداخليّ (infix notation)؛ أي من خلال حذف المعامل . والأقواس () المُستخدَمَين في الاستدعاء عادةً. المعاملات other القيمة المنطقية الأخرى التي ستطبق عليها العملية. القيمة المعادة تعاد قيمة منطقية تكون ناتج إجراء العملية and على القيمتين المعطيتين. أمثلة استخدام الدالة ()and لتطبيق العملية and على قيمتين منطقيتين: fun ...

Kotlin/Native

ما هي تقنية Kotlin/Native؟ تُستخدَم تقنية Kotlin/Native لترجمة شيفرات Kotlin إلى الصيغة الثنائيّة الأساسيّة (native binaries) والتي لا تتطلَّب آلةً افتراضيّة (virtual machine) لتشغيلها، وتشمل كلًا من المعالجات الخلفيّة (أو السند الخلفي [backend]) المعتمدة على تقنيات مكتبة LLVM للمترجِم (compiler) وكذلك تعريف الاستخدام الأساسيّ (native implementation) من مكتبة التشغيل (runtime) في Kotlin، وقد صُمّمت هذه التقنية للسماح بالترجمة في منصّات العمل التي تكون فيها الآلات الافتراضيّة غير متاحةٍ أو مرغوبةٍ (مثل أنظمة iOS والأهداف المدمجة [embedded targets])، أو عندما يحتاج ...

الدالة ‎‎to()‎ في Kotlin

تنشئ الدالة to()‎ عنصرًا من النوع Pair مكونًا من الكائن الذي استُدعي معه والمعامل الذي مُرّر إليه، أي العنصر that. البنية العامة infix fun <A, B> A.to(that: B): Pair<A, B> يُلاحَظ وجود الكلمة المفتاحية infix للدلالة على أن هذه الدالة يمكن استدعاؤها بنمط التدوين الداخليّ (infix notation)؛ أي من خلال حذف المعامل . والأقواس () المُستخدَمَين في الاستدعاء عادةً، وللمزيد من التفاصيل راجع توثيق التدوين الداخلي للدوال (infix functions). المعاملات that الكائن المراد استعماله مع الكائن المعطى في إنشاء كائن من ...

الدوال من المرتبة الأعلى (Higher-Order Functions) و Lambdas

الدوال من المرتبة الأعلى (Higher-Order Functions) وهي الدوال التي تقبل دوالًا أخرى كمعاملاتٍ (parameters) لها، أو تلك التي تُعيد (return) دوالًا أخرى كنتيجة لها، وكمثالٍ عنها لنأخذ الدالة lock()‎، وهي الدالة التي تقبل كائنًا lock ودالةً أخرى، حيث ستحصلُ الدالة على الكائن lock وتُنفِّذُ الدالةَ الوسيطةَ ثم تُحرِّر القفل في النهاية، كما في الشيفرة: fun <T> lock(lock: Lock, body: () -> T): T { lock.lock() try { ...

عرض (50 السابقة | 50 التالية) (20 | 50 | 100 | 250 | 500).