نتائج البحث

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

الدالة ‎‎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 { ...

Object.prototype.constructor

الخاصية Object.prototype.constructor تُعيد مرجعيةً إلى الدالة البانية Object التي تُنشِئ نسخةً (instance) من الكائن؛ لاحظ أنَّ قيمة هذه الخاصية تُشير إلى الدالة نفسها وليست سلسلةً نصيةً تحتوي على اسم الدالة؛ وتكون هذه القيمة للقراءة فقط في القيم الأوليّة مثل 1 و true و "test". الوصف جميع الكائنات تملك الخاصية constructor، والكائنات المُنشأة دون استخدام الدالة البانية مباشرةً (أي الشكل المختصرة لإنشاء الكائنات والمصفوفات) ستملك الخاصية constructor التي تُشير إلى الدالة البانية الأساسية لنوع الكائنات التي تتبع له. var o = ...

استخدام لغة Kotlin للتطوير في بيئة Android

تُعدُّ لغة Kotlin أداةً مناسبةً لتطوير تطبيقات Android لأنّها تزوِّد بمنصةٍ للعمل في نظام Android بميّزات لغات البرمجة الحديثة بدون فرض أي قيودٍ جديدة. ميزات استخدام لغة Kotlin للتطوير في بيئة Android التوافقيّة (Compitability): تتوافق لغة Kotlin كليًّا مع بيئة JDK6، وبهذا تتيح  تشغيل التطبيقات المكتوبة بلغة Kotlin على الأجهزة ذات الإصدارات الأقدم من أنظمة Android بدون أي مشاكل تُذكر، كما وتدعم برمجيةُ Android Studio أدوات لغة Kotlin بشكلٍ تامّ ومتوافقٍ مع أنظمة بناء Android. الأداء (Performance): تعمل التطبيقات المكتوبة ...

استبدال المُنشئ بتابع التصميم (Replace Constructor with Factory Method)

المشكلة لديك مُنشئ (constructor) معقد يقوم بما هو أكثر من مجرد وضع قيم المعامل في حقول الكائن. الحل إنشاء تابع تصميم واستخدامه لاستبدال استدعاءات المُنشئ. مثال قبل إعادة التصميم وجود منشئ معقد للصنف Employee: في لغة Java: class Employee { Employee(int type) { this.type = type; } //... } في لغة C#‎: public class Employee { public Employee(int type) { this.type = type; } //... } في لغة PHP: class ...

الخاصية list-style

الخاصية list-style في CSS هي خاصية مختصرة تؤدي إلى ضبط قيم الخاصيات list-style-type و list-style-image و list-style-position. بطاقة الخاصية القيمة الابتدائية لكل قيمة مختصرة: list-style-type: disc list-style-position: outside list-style-image: none تُطبَّق على عناصر القوائم. قابلة للوراثة نعم قابلة للتحريك لا القيمة المحسوبة لكل قيمة مختصرة: list-style-image: القيمة none أو رابط URI مطلق للصورة. list-style-position: كما حُدِّدَت. list-style-type: كما حُدِّدَت. /* type */ list-style: square; /* image */ list-style: url('../img/shape.png'); /* position */ list-style: inside; /* type | position */ list-style: georgian inside; /* type | image | position */ list-style: lower-roman url('../img/shape.png') outside; /* ...

الأنواع المتقدمة في TypeScript

أنواع التقاطع (Intersection Types) يجمعُ نوعُ تقاطعٍ عدّة أنواع في نوع واحد. يسمح هذا بجمع الأنواع الموجودة في نوع واحد يملك جميع الميّزات التي تحتاج إليها. مثلًا، النوعُ ‎Person & Serializable & Loggable‎ هو من النّوع ‎Person‎ والنّوع ‎Serializable‎ والنّوع ‎Serializable‎، كلّها مجموعة في نفس النّوع. هذا يعني أنّ كائنًا ما من هذا النوع سيحتوي على جميع عناصر الأنواع الثلاثة. تُستعمل أنواع التّقاطع عادةً في المخاليط (mixins) والمبادئ الأخرى التي قد تكون غريبة على البرمجة كائنيّة التوجه العاديّة (وهي متواجدة ...

المحدد ‎:first-of-type‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ في jQuery

المحدد ‎:first-of-type الوصف يحدد كل العناصر التي تكون الأولى بين العناصر الأخوة المجاورة لها ولها نفس اسم العنصر. jQuery( ":first-of-type" )‎ أُضيف مع الإصدار: 1.9. يطابق المحدد ‎:first-of-type العناصر التي ليس لها عنصر آخر له نفس العنصر الأب ونفس اسم العنصر قبل هذا العنصر في شجرة المستند. أمثلة البحث عن أول <span> في كل <div> مطابقة وإضافة صنف إليه: <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>first-of-type demo</title> <style> span.fot { color: red; ...

الدالة Char.compareTo()‎ في Kotlin

توازن الدالة compareTo()‎ بين قيمة المحرف الذي استُدعي معها والقيمة المُمرّرة إليها ثمَّ تعيد القيمة 0 إن كانا متساويين، أو قيمة سالبة إن كانت القيمة الأولى (قيمة المحرف الذي استُدعي معها) أصغر من القيمة الثانية، أو قيمة موجبة إن كانت القيمة الأولى أكبر من القيمة الثانية. البنية العامة fun compareTo(other: Char): Int المعاملات other المحرف الآخر الذي يراد موازنته مع المحرف المعطى. القيمة المعادة تعاد القيمة 0 إن كانت القيمة المعطاة متساوية مع قيمة الوسيط other، أو تعاد قيمة سالبة إن كانت القيمة الأولى ...

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

تجلب الدالة lastIndexOf()‎ فهرس آخر ظهور لعنصر محدَّد من المصفوفة أو المجموعة أو القائمة التي استُدعيت معها. البنية العامة يمكن استدعاء الدالة lastIndexOf()‎ مع المصفوفات، والمجموعات والقوائم: fun <T> Array<out T>.lastIndexOf(element: T): Int fun ByteArray.lastIndexOf(element: Byte): Int fun ShortArray.lastIndexOf(element: Short): Int fun IntArray.lastIndexOf(element: Int): Int fun LongArray.lastIndexOf(element: Long): Int fun FloatArray.lastIndexOf(element: Float): Int fun DoubleArray.lastIndexOf(element: Double): Int fun BooleanArray.lastIndexOf(element: Boolean): Int fun CharArray.lastIndexOf(element: Char): Int fun <T> Iterable<T>.lastIndexOf(element: T): Int fun <T> List<T>.lastIndexOf(element: T): Int القيم المعادة يعاد فهرس آخر ظهور للعنصر المعطى والموجود في المصفوفة أو المجموعة أو القائمة المعطاة، أو القيمة ‎-1 إن لم ...

الدالة CharSequence.indexOf()‎ في Kotlin

تجلب الدالة indexOf()‎ فهرس أول ظهور لمحرف أو سلسلة نصية محدَّدة من سلسلة المحارف التي استُدعيت معها. البنية العامة fun CharSequence.indexOf( char: Char, startIndex: Int = 0, ignoreCase: Boolean = false ): Int fun CharSequence.indexOf( string: String, startIndex: Int = 0, ignoreCase: Boolean = false ): Int المعاملات char المحرف المراد البحث عنه ضمن سلسلة من المحارف. startIndex السلسلة النصية المراد البحث عنها ضمن ...

الدالة Float.toFloat()‎ في Kotlin

تحوّل الدالة toFloat()‎ العدد الذي استُدعي معها إلى عدد عشري (أي من النوع Float). هذا قد يؤدي إلى تدوير العدد المراد تحويله. البنية العامة fun toFloat(): Float حلت الدالة Number.toFloat()‎ مكان هذه الدالة. القيمة المعادة يعاد عدد عشري (من النوع Float) يحوي العدد المعطى. أمثلة استعمال الدالة ()toFloat لتحويل عدد إلى عدد عشري: fun main(args: Array<String>) { val x : Float = 52.0f print(x.toFloat() ) // 52.0 } انظر أيضًا الدالة toByte()‎: تحول ...

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

تجلب الدالة takeWhile()‎ أول عناصر محققة لشرطٍ محدَّدٍ من المصفوفة أو القائمة التي استُدعيت معها.  البنية العامة inline fun <T> Array<out T>.takeWhile( predicate: (T) -> Boolean ): List<T> inline fun ByteArray.takeWhile( predicate: (Byte) -> Boolean ): List<Byte> inline fun ShortArray.takeWhile( predicate: (Short) -> Boolean ): List<Short> inline fun IntArray.takeWhile( predicate: (Int) -> Boolean ): List<Int> inline fun LongArray.takeWhile( predicate: (Long) -> Boolean ): List<Long> inline fun FloatArray.takeWhile( predicate: (Float) ...

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

توازن الدالة compareTo()‎ بين قيمة العنصر الذي استُدعيت معه والقيمة المُمرّرة إليه ثمَّ تعيد القيمة 0 إن كانا متساويين، أو قيمة سالبة إن كانت القيمة الأولى (قيمة العنصر الذي استُدعيت معه) أصغر من القيمة الثانية، أو قيمة موجبة إن كانت القيمة الأولى أكبر من القيمة الثانية. البنية العامة fun compareTo(other: Boolean): Int (source) المعاملات other القيمة المنطقية الأخرى التي ستطبق عليها العملية. القيمة المعادة تعاد القيمة 0 إن كانت القيمة المعطاة متساوية مع القيمة other، أو تعاد قيمة سالبة إن ...

الدالة Regex.toString()‎ في Kotlin

تحول الدالة toString()‎ تعبيرًا نمطيًّا إلى سلسلة نصية (أي نمط [Pattern] ذلك التعبير النمطي). البنية العامة fun toString(): String القيمة المعادة تعاد سلسلة نصية تمثل التعبير النمطي المعطى. أمثلة استعمال الدالة toString()‎ لتحويل تعبير نمطيّ إلى سلسلة نصية: fun main(args: Array<String>) { // يطابق التعبير النمطي التالي القيم العددية val reg = Regex("""-?\d+(\.\d+)?""") println(reg.toString()) // => -?\d+(\.\d+)? } انظر أيضًا الدالة toPattern()‎: تحول كائنًا من النوع Regex (تعبيرًا نمطيًا) إلى النوع Pattern (نمط).  ...

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

تجلب الدالة substringAfter()‎ كل الجزء الواقع بعد أول ظهور لمحرف أو لسلسلة نصية معينة في سلسلة نصية. البنية العامة fun String.substringAfter( delimiter: Char, missingDelimiterValue: String = this ): String (source) fun String.substringAfter( delimiter: String, missingDelimiterValue: String = this ): String المعاملات delimiter المحرف أو السلسلة النصية التي يراد جلب كامل الجزء الواقع بعدها. missingDelimiterValue السلسلة النصية التي ستعاد في حال لم يكن المعامل delimiter موجودًا ضمن السلسلة النصية المعطاة. القيمة الافتراضية هي: this (أي السلسلة النصية المعطاة نفسها). القيم المعادة ...

الثابت Float.MAX_VALUE في Kotlin

يمثل الثابت Float.MAX_VALUE أكبر قيمة موجبة نهائية (finite) لعدد عشري (float). البنية العامة const val MAX_VALUE: Float أمثلة استخدام الثابت Float.MAX_VALUE لمعرفة أكبر عدد عشري موجب يمكن استعماله: fun main(args: Array<String>) { println(Float.MAX_VALUE) // 3.4028235E38 } انظر أيضًا الثابت Float.MIN_VALUE: يمثل أصغر قيمة موجبة غير صفرية يمكن أن يأخذها عدد عشري (float). الثابت Float.NEGATIVE_INFINITY: يمثل قيمة سالبة لا نهائية (infinity) لعدد عشري (float). الثابت Float.POSITIVE_INFINITY: يمثل قيمة موجبة لا نهائية (infinity) لعدد عشري (float). ...

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

تتحقَّق الدالة singleOrNull()‎ من حواية المصفوفة أو المجموعة أو القائمة التي استُدعيت معها عنصرًا واحدًا فقط، أو عنصرًا واحدًا محققًا لشرط معيَّن ثمَّ تعيده، أو تعيد القيمة null خلاف ذلك. البنية العامة إن استدعيت الدالة singleOrNull()‎ مع مصفوفة أو مجموعة أو قائمة دون تمرير أي معامل، فستتحقَّق من احتواء تلك المصفوفة أو المجموعة أو القائمة على عنصر واحد فقط ثمَّ تعيده. وفي حال كانت تلك المصفوفة أو المجموعة أو القائمة فارغةً أو تحوي أكثر من عنصر واحد، فستعيد الدالة singleOrNull()‎ القيمة null: fun <T> Array<out T>.singleOrNull(): T? ...

الدالة Regex.matchEntire()‎ في Kotlin

تحاول الدالة matchEntire()‎ مطابقة جميع محارف السلسلة الممررة إليها مع التعبير النمطي الذي استدعي معها. البنية العامة actual fun matchEntire(input: CharSequence): MatchResult? المعاملات input سلسلة المحارف التي يراد تطابق جميع محارفها مع التعبير النمطي المعطى. القيمة المعادة تعاد نسخةٌ من الصنف MatchResult تحتوي على جميع محارف المعامل input إن تطابقت جميع تلك المحارف مع التعبير النمطي المعطى، أو تعاد القيمة null خلاف ذلك. أمثلة استعمال الدالة matchEntire()‎ لمعرفة سلسلة المحارف المطابقة للتعبير النمطي ‎-?\d+(\.\d+)?‎ بشكل كامل: fun main(args: Array<String>) { ...

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

تعيد الدالة unzip()‎ قائمتين، إذ تحتوي الأولى على القيم الأولى لكل زوج من أزواج المصفوفة أو المجموعة التكرارية التي استُدعيت معها وتحتوي الثانية على القيم الثانية لكل زوج من تلك الأزواج. البنية العامة يمكن استدعاء الدالة unzip()‎ مع المصفوفات والمجموعات التكرارية: fun <T, R> Array<out Pair<T, R>>.unzip(): Pair<List<T>, List<R>> fun <T, R> Iterable<Pair<T, R>>.unzip(): Pair<List<T>, List<R>> القيمة المعادة تعاد قائمتين؛ تحتوي الأولى على القيم الأولى لكل زوج من أزواج المصفوفة أو المجموعة التكرارية المعطاة وتحتوي الثانية على القيم الثانية لكل ...

الدالة CharSequence.groupingBy()‎ في Kotlin

تُنشئ الدالة groupingBy()‎ موردًا (source) من النوع Grouping من سلسلة المحارف التي استُدعيت معها لاستخدامه لاحقًا مع عمليات التجميع (group-and-fold operations) وذلك باستخدام الدالة keySelector المُمرّرة إليها لاستخلاص مفتاح من كل محرف. البنية العامة inline fun <K> CharSequence.groupingBy( crossinline keySelector: (Char) -> K ): Grouping<Char, K> الإصدار المطلوب: kotlin 1.1. وجود الكلمة المفتاحية inline يدل على أنَّ هذه الدالة مباشرة (للمزيد من التفاصيل، راجع صفحة الدوال المباشرة (inline functions)). المعاملات keySelector الدالة المستعملة في استخلاص مفتاح من كل محرف. القيم المعادة يُعاد موردٌ من النوع Grouping من المصفوفة أو المجموعة المعطاة لاستخدامه لاحقًا مع عمليات التجميع (group-and-fold). أمثلة ...

الدالة BooleanArray.get()‎ في Kotlin

يجلب التابع get()‎ عنصرًا ذي فهرس محدد من المصفوفة. يمكن الاستعاضة عن هذا التابع باستخدام معامل الفهرسة (index operator) المتمثل بالقوسين [] بالشكل: value = arr[index]‎ البنية العامة operator fun get(index: Int): Boolean وجود الكلمة المفتاحية operator يدل على أنّ هذا التابع مرتبط بمعامل الفهرسة الذي ذكرناه آنفًا. المعاملات index عدد صحيح يمثل فهرس العنصر المراد جلبه. القيم المعادة يعاد العنصر ذو الفهرس index المحدِّد والموجود في المصفوفة المعطاة. أمثلة استعمال التابع get()‎ لجلب العنصر الثاني من مصفوفة قيم منطقية: fun ...

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