نتائج البحث

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

PHP Object Iteration

يقدّم الإصدار الخامس من اللغة طريقة لتعريف العناصر ليكون بالإمكان المرور على قائمة من العناصر باستخدام العبارة foreach على سبيل المثال، وتستخدم جميع الخصائص المرئية بصورة افتراضية لعملية المرور على العناصر. المثال 1: مثال بسيط على المرور على عناصر الكائن <?php class MyClass { public $var1 = 'value 1'; public $var2 = 'value 2'; public $var3 = 'value 3'; protected $protected = 'protected var'; private ...

الكائن Object في JavaScript

الدالة البانية Object تُنشِئ كائنًا. البنية العامة // الشكل المختصر لتهيئة الكائن { [ nameValuePair1[, nameValuePair2[, ...nameValuePairN] ] ] } // استدعاء الدالة البانية new Object([value]) nameValuePairN أزواج من الأسماء (السلاسل النصية) والقيم (أيّ نوع من القيم) التي يُفصل فيها بين الاسم والقيمة بنقطتين رأسيتين :. value أيّة قيمة في JavaScript. الوصف الدالة البانية Object تُغلِّف (wrap) القيمة المعطية في كائن، وإذا كانت القيمة المعطية null أو undefined، فستُنشِئ وتُعيد كائنًا فارغًا، وفيما عدا ذلك فستُنشِئ وتُعيد كائنًا من النوع المناسب للقيمة المعطية، ...

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

تعيد الدّالة object()‎ كائنًا object‎ خامًا عديمَ المزايا، وهو الكائن الذي يُعدّ أساس جميع الأصناف. ويحتوي على التّوابع الشّائعة ضمن جميع نُسخ أصناف بايثون. البنية العامة object() المعاملات لا توجد مُعاملات. القيمة المعادة كائن object‎. أمثلة المثال التّالي يوضّح كيفيّة عمل هذه الدّالة: >>> object() <object object at 0x7f4f53afd0b0> ملاحظات لا يملك الكائن object‎ التّابع الخاصّ ‎_‎_‎dict‎_‎_‎‎، لذا لا يُمكنك إنشاء خاصيّات جديدة لنسخ الصّنف object‎. مصادر قسم الدالة object في صفحة Functions في توثيق Python الرسمي.

PHP Object Iteration

يقدّم الإصدار الخامس من اللغة طريقة لتعريف العناصر ليكون بالإمكان المرور على قائمة من العناصر باستخدام العبارة foreach على سبيل المثال، وتستخدم جميع الخصائص المرئية بصورة افتراضية لعملية المرور على العناصر. المثال 1: مثال بسيط على المرور على عناصر الكائن <?php class MyClass { public $var1 = 'value 1'; public $var2 = 'value 2'; public $var3 = 'value 3'; protected $protected = 'protected var'; private ...

الصنف Object في روبي

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

الكائن المؤجل (Deferred Object)

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

التابع Object._id2ref في روبي

يُحوِّل التابع id2ref_ معرِّف الكائن (id) إلى مرجعٍ للكائن. لا يجب استدعاؤه على معرِّف كائنٍ مُرِّر كمعامل ٍ إلى مُنهِي (finalizer). البنية العامة _id2ref(object_id) → an_object المعاملات object_id رقم معرِّف الكائن. القيم المعادة يُعاد الكائن المُسند إلى المُعرِّف object_id. أمثلة مثالٌ عن استخدام التابع id2ref_: s = "I am a string" #=> "I am a string" r = ObjectSpace._id2ref(s.object_id) #=> ...

المعامل == في الصنف Object في روبي

يتحقَّق المعامل == من تساوي كائنين مع بعضهما بعضًا. استُبدِل هذا المعامل في الأصناف السليلة (descendants) لتوفير دلالاتٍ خاصّةٍ بالصنف. البنية العامة obj == other → true or false المعاملات obj الكائن المراد التحقق من تساويه مع الكائن other. other الكائن الآخر الذي سيُتحقَق من تساويه مع الكائن obj. القيم المعادة تُعاد القيمة true إذا كان obj وother هما نفس الكائن، خلاف ذلك تُعاد القيمة false. أمثلة مثالٌ عن استخدام المعامل ==: obj = "a" other = obj.dup obj == other ...

التصريح عن الكائنات (Object Declarations) وتعابيرها (Expressions) في لغة Kotlin

قد تحتاج في بعض الأحيان لإنشاء كائنٍ بإجراء تعديلاتٍ طفيفةٍ على أحد الأصناف (classes) بدون التصريح عن صنفٍ فرعيٍّ (subclass) له؛ تعالج لغة Java مثل هذه الحالات بالاعتماد على الأصناف الداخليّة المجهولة (anonymous inner classes)، وتُعمِّمها لغة Kotlin من خلال طرح مفهوم التصريح عن الكائنات وتعابيرها. تعابير الكائنات (Object Expressions) لإنشاء كائنٍ من صنفٍ مجهولٍ (anonymous) يرِث من نوعٍ أو أكثر تكون الشيفرة بالشكل: window.addMouseListener(object : MouseAdapter() { override fun mouseClicked(e: MouseEvent) { ...

Kotlin/Topics

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

Kotlin/Native

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

تقديم الكائن الفارغ (Introduce Null Object)

المشكلة تؤدي إعادة بعض التوابع للقيمة null بدلًا من الكائنات الحقيقية إلى امتلاء الشيفرة البرمجية بالعديد من نقاط التحقق من القيمة null. الحل إعادة كائن فارغ يظهر السلوك الافتراضي بدلًا من null. مثال قبل إعادة التصميم وجودة نقطة تحقق شرطية من الكائن customer لاتخاذ إجراء مناسب إن كانت قيمته null: في لغة Java: if (customer == null) { plan = BillingPlan.basic(); } else { plan = customer.getPlan(); } في لغة C#‎: if (customer == null) { plan = BillingPlan.Basic(); } else { ...

الحفاظ على الكائن كاملًا (Preserve Whole Object)

المشكلة جلب عدة قيم من أحد الكائنات، ثم تمريرها كمعاملات إلى أحد التوابع. الحل حاول تمرير الكائن بالكامل بدلًا من ذلك. مثال قبل إعادة التصميم جلب قيمة درجة الحرارة المنخفضة low والمرتفعة high من الكائن daysTempRange ثم تمريرهما إلى التابع ()withinTange: في لغة Java: int low = daysTempRange.getLow(); int high = daysTempRange.getHigh(); boolean withinPlan = plan.withinRange(low, high); في لغة C#‎: int low = daysTempRange.GetLow(); int high = daysTempRange.GetHigh(); bool withinPlan = plan.WithinRange(low, high); في لغة PHP: $low = $daysTempRange->getLow(); $high = $daysTempRange->getHigh(); $withinPlan = $plan->withinRange($low, $high); في لغة Python: ...

تبديل المصفوفات بكائنات (Replace Array with Object)

تقنية إعادة التصميم هذه هي حالة خاصة من تبديل قيم البيانات إلى كائنات. المشكلة لديك مصفوفة تحتوي على أنواع مختلفة من البيانات. الحل استبدال المصفوفة بكائن يكون له حقول منفصلة لكل عنصر. مثال قبل إعادة التصميم احتواء المصفوفة row على نوعين مختلفين من البيانات (سلسلة نصية وعدد): في لغة Java: String[] row = new String[2]; row[0] = "Liverpool"; row[1] = "15"; في لغة C#‎: string[] row = new string[2]; row[0] = "Liverpool"; row[1] = "15"; في لغة PHP: $row = array(); $row[0] = "Liverpool"; $row[1] = 15; في لغة ...

تعريف كائن المُعامل (Introduce Parameter Object)

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

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

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

نقل الميزات ما بين الكائنات (Moving Features between Objects)

تساعد عملية إعادة التصميم (refactoring) في توزيع المهام بشكل مثاليّ على الأصناف (classes) المختلفة في الشيفرة، وتضمن تقنيات الحل هذه طريقةً آمنةً لنقل المهام (functionality) ما بين الأصناف، وإنشاء أصناف جديدة وحماية تفاصيل عملية التنفيذ (implementation) من الوصول العام (public access)، وهذه التقنيات تشمل: نقل التابع (Move Method) المشكلة: استخدام التابع (method) في صنفٍ (class) ما أكثر من استخدامه في صنفه الأساسيّ. الحل: إنشاء تابعٍ جديدٍ في الصنف الأكثر استخدامًا لذلك التابع ونقل شيفرته إلى التابع الجديد، ثم تحويل الشيفرة ...

نقل الميزات ما بين الكائنات (Moving Features between Objects)

تساعد عملية إعادة التصميم (refactoring) في توزيع المهام بشكل مثاليّ على الأصناف (classes) المختلفة في الشيفرة، وتضمن تقنيات الحل هذه طريقةً آمنةً لنقل المهام (functionality) ما بين الأصناف، وإنشاء أصناف جديدة وحماية تفاصيل عملية التنفيذ (implementation) من الوصول العام (public access)، وهذه التقنيات تشمل: نقل التابع (Move Method) المشكلة: استخدام التابع (method) في صنفٍ (class) ما أكثر من استخدامه في صنفه الأساسيّ. الحل: إنشاء تابعٍ جديدٍ في الصنف الأكثر استخدامًا لذلك التابع ونقل شيفرته إلى التابع الجديد، ثم تحويل الشيفرة ...

التساوي (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. ...

التهيئة الأولية للصنف ‎‎Any‎ في Kotlin

تعيد الدالة Any()‎ نسخةً من الصنف Any والذي هو الجذر الرئيسيّ في الهرميّة العامّة لأيّ صنفٍ مُستخدَمٍ أثناء البرمجة في Kotlin؛ أي أنّ كلَّ صنفٍ سيكون له الصنف الأعلى (superclass)‏ Any. البنية العامة Any() القيم المعادة يعاد كائنٌ (object) من الصنف Any. أمثلة تنشِئ الدالة Any()‎ في الشيفرة الآتية كائنًا من الصنف Anyباسم obj ، ثم يُحدِّد صنف الكائن المُنشَأ وذلك بالاعتماد على خاصيّة الاسم البسيط للصنف (وهي class.simpleName) : fun main(args: Array<String>) {    val obj = Any()    println(" ${obj::class.simpleName}")  // Any } انظر ...

التهيئة الأولية للصنف ‎‎Any‎ في Kotlin

تعيد الدالة Any()‎ نسخةً من الصنف Any والذي هو الجذر الرئيسيّ في الهرميّة العامّة لأيّ صنفٍ مُستخدَمٍ أثناء البرمجة في Kotlin؛ أي أنّ كلَّ صنفٍ سيكون له الصنف الأعلى (superclass)‏ Any. البنية العامة Any() القيم المعادة يعاد كائنٌ (object) من الصنف Any. أمثلة تنشِئ الدالة Any()‎ في الشيفرة الآتية كائنًا من الصنف Anyباسم obj ، ثم يُحدِّد صنف الكائن المُنشَأ وذلك بالاعتماد على خاصيّة الاسم البسيط للصنف (وهي class.simpleName) : fun main(args: Array<String>) {    val obj = Any()    println(" ${obj::class.simpleName}")  // Any } انظر ...

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

يمثل الصنف Float عددًا عشريًّا (دقة أحادية للأعداد بعد الفاصلة [single-precision floating point]) بحجم 32 بت مطابقًا للمعيار IEEE 754. في بيئة التشغيل JVM، القيم غير المعدومة (non-nullable) لهذا النوع تُمثَّل كقيم للنوع float الأساسي. class Float : Number, Comparable<Float> الدوال compareTo توازن الدالة compareTo()‎ بين عدد عشري (float) وعدد آخر ثمَّ تعيد القيمة 0 إن كانا متساويين، أو قيمة سالبة إن كان العدد الأول (العدد الذي استُدعي مع الدالة) أصغر من العدد الثاني الممرر إليها، أو قيمة موجبة إن كان العدد الأول أكبر من العدد الثاني. dec تنقص ...

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

يمثل الصنف Float عددًا عشريًّا (دقة أحادية للأعداد بعد الفاصلة [single-precision floating point]) بحجم 32 بت مطابقًا للمعيار IEEE 754. في بيئة التشغيل JVM، القيم غير المعدومة (non-nullable) لهذا النوع تُمثَّل كقيم للنوع float الأساسي. class Float : Number, Comparable<Float> الدوال compareTo توازن الدالة compareTo()‎ بين عدد عشري (float) وعدد آخر ثمَّ تعيد القيمة 0 إن كانا متساويين، أو قيمة سالبة إن كان العدد الأول (العدد الذي استُدعي مع الدالة) أصغر من العدد الثاني الممرر إليها، أو قيمة موجبة إن كان العدد الأول أكبر من العدد الثاني. dec تنقص ...

الدالة ‎‎Any.hashCode()‎‎ في Kotlin

تعيد الدالة hashCode()‎ الشيفرة Hash الخاصّة بالكائن الذي استُدعي معها. تُحقِّق هذه الدالة الشرطين الآتيين دائمًا: تعيد نفس العدد الصحيح دائمًا في كل مرة تستدعى فيها مع الكائن نفسه شريطة عدم تغيُّر أيّ معلومة تستخدمها الدالة equals()‎ عند موازنة هذا الكائن مع غيره. إذا تساوى كائنان بحسب الدالة equals()‎، فيجب أن تعيد الدالة hashCode()‎ شيفرة hash نفسها لكلٍّ منها. البنية العامة open fun hashCode(): Int وجود الكلمة المفتاحيّة open هنا يدل على السماح بإعادة تعريف (override) هذه الدالة في الأصناف الفرعيّة ...

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

يمثل الصنف Double عددًا عشريًّا مضاعفًا (دقة مضاعفة للأعداد بعد الفاصلة [double-precision floating point]) بحجم 64 بت مطابقًا للمعيار IEEE 754. في بيئة التشغيل JVM، القيم غير المعدومة (non-nullable) لهذا النوع تُمثَّل كقيم للنوع double الأساسي. class Double : Number, Comparable<Double> الدوال compareTo توازن الدالة compareTo()‎ بين عدد عشري مضاعف (double) وعدد آخر ثمَّ تعيد القيمة 0 إن كانا متساويين، أو قيمة سالبة إن كان العدد الأول (العدد الذي استُدعي مع الدالة) أصغر من العدد الثاني الممرر إليها، أو قيمة موجبة إن كان العدد الأول أكبر ...

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

يمثل الصنف Double عددًا عشريًّا مضاعفًا (دقة مضاعفة للأعداد بعد الفاصلة [double-precision floating point]) بحجم 64 بت مطابقًا للمعيار IEEE 754. في بيئة التشغيل JVM، القيم غير المعدومة (non-nullable) لهذا النوع تُمثَّل كقيم للنوع double الأساسي. class Double : Number, Comparable<Double> الدوال compareTo توازن الدالة compareTo()‎ بين عدد عشري مضاعف (double) وعدد آخر ثمَّ تعيد القيمة 0 إن كانا متساويين، أو قيمة سالبة إن كان العدد الأول (العدد الذي استُدعي مع الدالة) أصغر من العدد الثاني الممرر إليها، أو قيمة موجبة إن كان العدد الأول أكبر ...

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

تعيد الدالة takeIf()‎ الكائن (object) الذي استُدعي معها إن كان ذلك الكائن يحقق شرطًا معيّنًا، أو تعيد القيمة null بخلاف ذلك. البنية العامة inline fun <T> T.takeIf(predicate: (T) -> Boolean): T? يُلاحَظ وجود الكلمة المفتاحية inline للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions). المعاملات predicate دالةٌ تطبق على كل كائن من الكائنات المعطاة وتعيد قيمة منطقية مقابلة لكلٍّ منها. القيم المعادة الكائن الذي استُدعيت الدالة معها إن كان ذلك الكائن يحقق الشرط prediacte، ...

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

تعيد الدالة takeUnless()‎ الكائن (object) الذي استُدعي معها إن لم يكن هذا الكائن يحقق شرطًا معيّنًا، أو يعيد القيمة null بخلاف ذلك. البنية العامة inline fun <T> T.takeUnless(predicate: (T) -> Boolean): T? يُلاحَظ وجود الكلمة المفتاحية inline للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions). المعاملات predicate دالةٌ تطبق على كل كائن من الكائنات المعطاة وتعيد قيمة منطقية مقابلة لكلٍّ منها. القيم المعادة تعيد الكائن الذي استُدعيت عبره الدالة إن لم يكن هذا الكائن ...

الخاصية ‎‎javaClass‎ في Kotlin

تعيد الخاصيّة javaClass صنف Java الخاص بالكائن (object) الذي تُستدعى عبره أثناء التشغيل (runtime)، وتُعرَّف هذه الخاصية في جميع الأصناف الفرعيّة (sub-classes) من الصنف Any. البنية العامة inline val <T : Any> T.javaClass: Class<T> يُلاحَظ وجود الكلمة المفتاحية inline للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions). القيم المعادة صنف Java الخاصّ بالكائن الذي تُستدعى عبره أثناء التشغيل (runtime). أمثلة تنشِئ الشيفرة الآتية سلسلةً نصيةً باسم a، وتحصل على صنف Java الخاص بها عبر استدعاء ...

الخاصية ‎‎javaClass‎ في Kotlin

تعيد الخاصيّة javaClass صنف Java الخاص بالكائن (object) الذي تُستدعى عبره أثناء التشغيل (runtime)، وتُعرَّف هذه الخاصية في جميع الأصناف الفرعيّة (sub-classes) من الصنف Any. البنية العامة inline val <T : Any> T.javaClass: Class<T> يُلاحَظ وجود الكلمة المفتاحية inline للدلالة على أن هذه الدالة مباشرة، وللمزيد من التفاصيل راجع توثيق الدوال المباشرة (inline functions). القيم المعادة صنف Java الخاصّ بالكائن الذي تُستدعى عبره أثناء التشغيل (runtime). أمثلة تنشِئ الشيفرة الآتية سلسلةً نصيةً باسم a، وتحصل على صنف Java الخاص بها عبر استدعاء ...

المقارنة بين لغتيّ البرمجة 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 في نطاق JavaScript

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

الحزم (Packages) في Kotlin

التصريح عن الحزم يبدأ الملف المصدريّ (source file) عادةً بالتصريح (declaration) عن الحزم مثل: package foo.bar fun baz() {} class Goo {} // ... ويتوضع حينها كلُّ ما يحتويه هذا الملف (كالأصناف [classes] والدوال [functions] مثلًا) في الحزمة المُصرَّح عنها ببدايته، ففي الشيفرة السابقة إن الاسم الفعليّ الكامل للدالة baz()‎ هو foo.bar.baz والاسم الكامل للصنف Goo هو foo.bar.Goo. وإذا لم تُحدَّد الحزمة في بداية الملف فإن محتوياته تتبع للحزمة الافتراضيّة "default" التي لا اسم لها. استيراد الحزم الافتراضيّة (Default Imports) يُستورَد عددٌ من الحزم ...

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

يمثل الصنف Regex تعبيرًا نمطيا قابلًا للتعديل (immutable regular expression). إن أردت الاطلاع على المزيد من المعلومات المتعلقة بصياغة النمط (pattern)، انتقل إلى صفحة الصنف Pattern. actual class Regex : Serializable الدوال البانية <init> تنشئ الدالة Regex()‎ تعبيرًا نمطيًا (regular expression) انطلاقًا من السلسلة النصية المُمرّرة إليه. الخاصيات options تمثل هذه الخاصية مجموعةَ الخيارات التي استُخدمت في إنشاء التعبير النمطي الذي استُدعي معها. pattern تمثل هذه الخاصية النمط الأولي الذي استُخدم في إنشاء التعبير النمطي الذي استُدعي معها. الدوال containsMatchIn ...

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

يمثل الصنف Regex تعبيرًا نمطيا قابلًا للتعديل (immutable regular expression). إن أردت الاطلاع على المزيد من المعلومات المتعلقة بصياغة النمط (pattern)، انتقل إلى صفحة الصنف Pattern. actual class Regex : Serializable الدوال البانية <init> تنشئ الدالة Regex()‎ تعبيرًا نمطيًا (regular expression) انطلاقًا من السلسلة النصية المُمرّرة إليه. الخاصيات options تمثل هذه الخاصية مجموعةَ الخيارات التي استُخدمت في إنشاء التعبير النمطي الذي استُدعي معها. pattern تمثل هذه الخاصية النمط الأولي الذي استُخدم في إنشاء التعبير النمطي الذي استُدعي معها. الدوال containsMatchIn ...

تبديل التابع إلى كائن التابع (Replace Method with Method Object)

المشكلة وجود تابعٍ طويلٍ بالكثير من المتغيِّرات المحليّة (local variables) المتداخلة والتي تحول دون تطبيق تقنية الحل باستخراج التابع (extract method). الحل نقل التابع إلى صنفٍ (class) مستقلٍ بحيث تصبح متغيِّراته المحليّة حقولًا (fields) لهذا الصنف، وتقسيم التابع بعد ذلك إلى عدّة توابع أصغر في الصنف ذاته. مثال قبل إعادة التصميم نلاحظ وجود العديد من المتغيِّرات المحليّة في التابع price()‎ بالإضافة إلى عملياتٍ أخرى قد تكون طويلةً ومعقَّدة: في لغة Java: class Order { //... public double price() ...

تبديل قيم البيانات إلى كائنات (Replace Data Values with Objects)

المشكلة وجود حقلٍ (field) مٌخصَّص للبيانات في صنفٍ (class) ما (أو في عددٍ من الأصناف)، ولهذا الحقل بياناته وسلوكه (behaviour) المرتبط به. الحل إنشاء صنفٍ جديدٍ ليُوضَع فيه الحقل (field) بالإضافة إلى سلوكه المرتبط به، وتخزين كائنٍ (object) من هذا الصنف الجديد في الصنف الأصليّ للحقل. مثال قبل إعادة التصميم يحتوي الصنف Order على الحقل customer الذي يحتوي بيانات نصيّة (من النوع String) كما هو واضح في مخطط الأصناف الآتي: الصنف Order يحتوي على الحقل customer الذي يحتوي بيانات نصيّة. ...

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

أنماط الشيفرات المُتعارَف عليها ما بين مبرمجي Kotlin

تعرِض هذه الصفحة أنماط كتابة الشيفرات المُتعارَف عليها (conventions) من قِبل مبرمجي لغة Kotlin. تطبيق دليل التنسيق (Applying the Style Guide) لضبط المُنسِّق IntelliJ formatter بما يتوافق مع هذا الدليل يُنصَح بتثبيت إضافة Kotlin بالإصدار 1.2.20 (أو أي إصدارٍ أحدث) وضبط المّحرِّر بالانتقال إلى الإعدادات (Settings) ثمّ المُحرِّر (Editor) ثم نمط الشيفرة (Code Style) ثم Kotlin واختر "ضبط من..." Set from…"‎" في الزاوية اليمنى العُلويَّة ومن القائمة اختر الخيار Predefined style/Kotlin style guide. وللتأكد من تنسيق الشيفرة وفقًا لدليل Kotlin ...

أنماط الشيفرات المُتعارَف عليها ما بين مبرمجي Kotlin

تعرِض هذه الصفحة أنماط كتابة الشيفرات المُتعارَف عليها (conventions) من قِبل مبرمجي لغة Kotlin. تطبيق دليل التنسيق (Applying the Style Guide) لضبط المُنسِّق IntelliJ formatter بما يتوافق مع هذا الدليل يُنصَح بتثبيت إضافة Kotlin بالإصدار 1.2.20 (أو أي إصدارٍ أحدث) وضبط المّحرِّر بالانتقال إلى الإعدادات (Settings) ثمّ المُحرِّر (Editor) ثم نمط الشيفرة (Code Style) ثم Kotlin واختر "ضبط من..." Set from…"‎" في الزاوية اليمنى العُلويَّة ومن القائمة اختر الخيار Predefined style/Kotlin style guide. وللتأكد من تنسيق الشيفرة وفقًا لدليل Kotlin ...

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

يمثل الصنف Byte عددًا صحيحًا ذا إشارة (signed integer) بحجم 8 بت. في بيئة التشغيل JVM، القيم غير المعدومة (non-nullable) لهذا النوع تُمثَّل كقيم للنوع byte الأساسي. class Byte : Number, Comparable<Byte> الدوال compareTo توازن الدالة compareTo()‎ بين قيمة العنصر الذي استُدعي معها والقيمة المُمرّرة إليها ثمَّ تعيد القيمة 0 إن كانا متساويين، أو قيمة سالبة إن كانت القيمة الأولى (قيمة العنصر الذي استُدعيت معه) أصغر من القيمة الثانية، أو قيمة موجبة إن كانت القيمة الأولى أكبر من القيمة الثانية. dec تنقص الدالة dec()‎ القيمة ...

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

يمثل الصنف Byte عددًا صحيحًا ذا إشارة (signed integer) بحجم 8 بت. في بيئة التشغيل JVM، القيم غير المعدومة (non-nullable) لهذا النوع تُمثَّل كقيم للنوع byte الأساسي. class Byte : Number, Comparable<Byte> الدوال compareTo توازن الدالة compareTo()‎ بين قيمة العنصر الذي استُدعي معها والقيمة المُمرّرة إليها ثمَّ تعيد القيمة 0 إن كانا متساويين، أو قيمة سالبة إن كانت القيمة الأولى (قيمة العنصر الذي استُدعيت معه) أصغر من القيمة الثانية، أو قيمة موجبة إن كانت القيمة الأولى أكبر من القيمة الثانية. dec تنقص الدالة dec()‎ القيمة ...

الأنواع المُعمَّمة (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 لها ...

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

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

التعابير الاصطلاحية (Idioms) في لغة Kotlin

تعرِض هذه الصفحة عددًا من التعابير الاصطلاحيّة المستخدَمة بكثرةٍ في لغة Kotlin، ولأيّ اصطلاحٍ جديدٍ لم يُذكَر فيمكنك تعديل هذه الصفحة لإضافته. إنشاء كائنات نقل البيانات DTO:‏ Data Transfer Objects (الكائنات POJO/POCO) ليكن الصنف (class) الآتي باسم Customer: data class Customer(val name: String, val email: String) وله التوابع الوظيفيّة (functional methods) الآتية: توابع getter (وتوابع setter في حالة المتحولات من النوع var) لكافة الخاصّيّات (properties) equals()‎ hashCode()‎ toString()‎ copy()‎ component1()‎ و component2()‎ ...إلخ. وذلك لكافة الخاصّيّات (properties) في الصنف (راجع أصناف البيانات ...

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

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

الاستخدام الخطأ لمبادئ البرمجة كائنية التوجه (Object-Orientation Abusers)

من مشاكل الشيفرات أيضًا التطبيقُ الخطأ وغير المكتمل لمبادئ البرمجة كائنية التوجّه (Object-Oriented)، مثل: استخدام الأصناف البديلة (alternative) ذات الواجهات (interfaces) المختلفة المشكلة: التطابق بالمهام ما بين صنفين ولكن بأسماءٍ مختلفةٍ لتوابعهما. الحل: حذف أحد الصنفين بعد تنفيذ إحدى الحلول الآتية: إعادة تسمية التوابع (methods) لتصبح متطابقةً بكافّة الأصناف البديلة، أو توحيد التوقيع (signature) وتعريف الاستخدام ما بين التوابع (إمّا بنقل التابع أو إضافة المعاملات أو دمج التوابع عبر المعاملات)، أو استخراج صنفٍ أعلى وجعلهما صنفين فرعيين له (إن كان التطابق جزئيًا). الوراثة الفائضة (refused bequest) ...

الأصناف المتداخلة (Nested) والداخلية (Inner) في لغة Kotlin

الأصناف المتداخلة (Nested) يُمكن للأصناف أن تتداخل فيما بينها، ويتَّضح ذلك عبر المثال الآتي: class Outer {    private val bar: Int = 1    class Nested {        fun foo() = 2    } } val demo = Outer.Nested().foo() // == 2 إذ يتوضَّع الصنف باسم Nested داخل الصنف Outer ، وعند تعريف المتغيِّر demo فهو سيأخذ القيمة من الدالة foo والموجودة في الصنف Nested المُعرَّف بالصنف Outer والتي هي القيمة 2. الأصناف الداخليَّة (Inner Classes) يُمكن تحديد الصنف كصنفٍ داخليٍّ بالكلمة المفتاحيّة inner وذلك بهدف إتاحة الوصول لكافّة عناصر ...

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

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

الانعكاس (Reflection) في لغة Kotlin

الانعكاس هو مجموعةٌ من مميّزات اللغة والمكتبات التي تسمح بمراقبة بُنية البرنامج أثناء التنفيذ، إذ تولي لغة Kotlin أهميةً كبرى لكلٍّ من الدوال (functions) والخاصّيّات (properties) وتستمر بتتبُّعها (مثل معرفة اسم أو نوع الخاصّيّة والدالة أثناء التنفيذ) وهذا يرتبط ارتباطًا وثيقًا مع استخدام النمط الوظائفيّ (functional) أو التفاعليّ (reactive). ملاحظة: إن الجزء التنفيذيّ (runtime component) المطلوب في منصّة العمل Java لاستخدام ميزات الانعكاس يُوزَّع كملف ‎.jar مستقلٍّ (kotlin-reflect.jar) وذلك بهدف تخفيض حجم التخزين المطلوب لمكتبة التنفيذ (runtime library) للتطبيقات غير ...

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

يمثل الصنف Char محرفًا بحجم 16 بت مرمزًا بالترميز الموحَّد (Unicode). في بيئة التشغيل JVM، القيم غير المعدومة (non-nullable) لهذا النوع تُمثَّل كقيم للنوع char الأساسي. class Char : Comparable<Char> الدوال compareTo توازن الدالة compareTo()‎ بين قيمة المحرف الذي استُدعي معها والقيمة المُمرّرة إليها ثمَّ تعيد القيمة 0 إن كانا متساويين، أو قيمة سالبة إن كانت القيمة الأولى (قيمة المحرف الذي استُدعي معها) أصغر من القيمة الثانية، أو قيمة موجبة إن كانت القيمة الأولى أكبر من القيمة الثانية. dec تعيد الدالة dec()‎ المحرف السابق للمحرف الذي ...

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

يمثل الصنف Char محرفًا بحجم 16 بت مرمزًا بالترميز الموحَّد (Unicode). في بيئة التشغيل JVM، القيم غير المعدومة (non-nullable) لهذا النوع تُمثَّل كقيم للنوع char الأساسي. class Char : Comparable<Char> الدوال compareTo توازن الدالة compareTo()‎ بين قيمة المحرف الذي استُدعي معها والقيمة المُمرّرة إليها ثمَّ تعيد القيمة 0 إن كانا متساويين، أو قيمة سالبة إن كانت القيمة الأولى (قيمة المحرف الذي استُدعي معها) أصغر من القيمة الثانية، أو قيمة موجبة إن كانت القيمة الأولى أكبر من القيمة الثانية. dec تعيد الدالة dec()‎ المحرف السابق للمحرف الذي ...

بنية البرمجة في لغة 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 ...

الدوال المباشرة (Inline Functions) في لغة Kotlin

الدوال المباشرة (Inline Functions) ينتُج عن استخدام الدوال من المرتبة الأعلى (higher-order functions) بعض التأثيرات السلبيّة أثناء التنفيذ (runtime)، إذ تُعدُّ كل دالة كائنًا (object) ضمن نطاقٍ مغلقٍ (closure) يشمل المتغيِّرات التي يمكن الوصول إليها في بُنية الدالة، كما ويتطلَّب ذلك تكلفةً إضافيّةً عند تخصيص جزءٍ من الذاكرة (لكلٍ من كائنات الدوال والأصناف [classes]) وعند الاستدعاءات الوهمية (virtual calls) أثناء التنفيذ. وقد يُحدُّ من هذه المشاكل باللجوء إلى تعابير lambda المباشرة، إذ تُعدُّ الدالة lock()‎ مثالًا جيدًا لمثل هذه الحالات التي ...

الكلمات المفتاحية (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 ...

الأصناف المُغلَقة (Sealed Classes) في لغة Kotlin

تُستخدَم الأصناف المُغلَقة لتمثيل الهرميّة (hierarchy) المحدودة للأصناف؛ وذلك عندما يكون نوع القيمة هو أحد الأنواع الموجودة في مجموعةٍ مُحدَّدةٍ (limited set) وليس أيّ نوع آخر، وبالتالي تُعدُّ هذه الأصناف إضافةً (extension) لأصناف الثوابت المُتعدَّدة (enum classes)، إذ إنّ مجموعة القيم لنوع enum محدودة أيضًا ولكل ثابت فيها نسخةٌ (instance) واحدةٌ فقط، بينما يمكن أن يكون للصنف الفرعيّ (subclass) من الصنف المغلق أكثر من نسخةٍ تحتوي على الحالة (case). ويُستخدَم المُحدِّد (modifier)‏ sealed قبل اسم الصنف للتصريح عن أنّه من ...

تعبير this

تعبير this يُستخدم التعبير this لتحديد المستقبِل (receiver) الحاليّ، ويختلف ذلك بحسب الحالتين: تعبِّر الكلمة المفتاحيّة this في أيّ من عناصر الصنف (class member) عن الكائن (object) الحاليّ من هذا الصنف. وتعبِّر في الدالة الإضافيّة (extension functions) أو قيمة الدالة مع المستقبِل (function literal with receiver) عن معامل المستقبِل الذي سيُمرَّر على الطرف اليساريّ من النقطة .. وإذا لم يكن هناك أي تقييدٍ (qualification) مرتبطٍ مع الكلمة المفتاحيّة this فإنها ستعبِّر عن أقرب مجالٍ (scope) داخليّ محيطٍ بها (enclosing)، وللتعبير ...

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

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

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

الانتقال الفرعيّ Delegation في Kotlin

أثبت نموذج الانتقال الفرعيّ فعّاليته كبديلٍ جيّدٍ عن وراثة تعريف الاستخدام (implementation inheritance) إذ تدعم لغة Kotlin هذه الميّزة بشكلٍ طبيعيّ دون الحاجة إلى أيّ نوع قياسيّ من الشيفرات، وبالتالي فإنّ الصنف المُشتقّ (Derived) يرِث من الواجهة (Base) وينقل فرعيًا (delegate) كلَّ توابعه العامّة (public methods) إلى كائنٍ مُحدَّدٍ، كما في الشيفرة الآتية: interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fun print() { print(x) } } class Derived(b: Base) : Base ...

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

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

أوامر الرجوع (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 // ...

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

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

أصناف البيانات (Data Classes) في لغة Kotlin

تُنشَأ بعض الأصناف بهدف تخزين البيانات فيها بشكلٍ أساسيّ، وبالتالي فإنّ كلّ ما تقوم به هذه الأصناف من وظائف يرتبط بالبيانات، وهذا ما يُسمى بأصناف البيانات في لغة Kotlin وتُعرَّف بالمُحدِّد data كما يلي: data class User(val name: String, val age: Int) قواعد عامّة يقوم المُترجِم في الأصناف من هذه النوع باشتقاق العناصر (deriving members) الآتية من كلِّ الخاصّيّات المُعرَّفة في الباني الأساسيّ (primary constructor): كلًا من equals()‎ و hashCode()‎ الدالة toString()‎ بشكلها ‎"User(name=John, age=42‎)‎"‎ الدوال بالصيغة componentN() functions بما ...

التصريحات بالتفكيك (Destructuring Declarations) في لغة Kotlin

التصريح بالتفكيك قد تحتاج في بعض الأحيان لتفكيك الكائن (object) إلى عددٍ من المتغيِّرات، مثل: val (name, age) = person تٌسمَّى الصيغة السابقة بالتصريح بالتفكيك والذي يُنشِئ أكثر من متغيِّر بنفس الوقت (وهما المتغيِّرانname و age) حيث يُسمح باستخدامهما بشكلٍ مستقلٍ تمامًا كما في الشيفرة الآتية: println(name) println(age) إذ يُترجَم التصريح بالتفكيك كما يلي: val name = person.component1() val age = person.component2() حيث تُعدُّ الدالتان component1()‎ و component2()‎ مثالًا عن الاصطلاحات الأساسيّة المُستخدَمة في لغة Kotlin (راجع المُعامِلات مثل + و * وحلقات for و... ...

الدوال (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 ، ...

الأصناف (Classes) والوراثة (Inheritance) في لغة Kotlin

تُستخدم الكلمة المفتاحيّة class للتصريح (declaration) عن الصنف بالصيغة الآتية (اسم الصنف Invoice): class Invoice { } ويحتوي التصريح على اسم الصنف (class name) وترويسة الصنف (class header) (والتي تُحدِّد معاملات النوع والباني الأساسيّ ...إلخ.) وبُنية الصنف (class body) محاطةً بالقوسين {}، وإن كلًا من ترويسة الصنف وبُنيته اختياريتان؛ فإذا كان الصنف خاليًا لا حاجة للأقواس، مثل: class Empty الباني (Constructor) يوجد لكلّ صنف في لغة Kotlin بانٍ رئيسيّ (primary) واحدٌ وبانٍ -أو أكثر- ثانويّ (secondary)، إذ يُعدُّ الباني الرئيسيّ جزءًا من ...

مُحدِّدات الوصول (Visibility Modifiers) في لغة Kotlin

تُعيِّن مُحدِّدات الوصول قابليةَ الوصول إلى كلٍّ من الأصناف (classes) والكائنات (objects) والواجهات (interfaces) والدوال (functions) والخاصّيّات (properties) ودوال الوصول إليها من النوع setters (لأن مُحدِّد الوصول إلى getter مماثلٌ للوصول إلى الخاصّيّة نفسها)، وهناك أربعة أنواعٍ من المُحدِّدات وهي: private و protected و internal و public والنوع الافتراضيّ منها هو public (يُستخدم عند عدم وجود تصريحٍ عن إحداها)، وفيما يلي شرح لكيفيّة تطبيق المُحدِّدات على أنواعٍ مختلفةٍ من التصريحات (declarations). الحزم (Packages) يمكن تعريف كلٍّ من الدوال والخاصّيّات والأصناف ...

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

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

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

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

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

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

التعامل مع النصوص والتعابير النمطية في Kotlin

تستخدم الدوال التالية في التعامل مع النصوص والتعابير النمطية. الأنواع Appendable CharCategory CharDirectionality Charsets MatchGroup يمثل الصنف MatchGroup النتائج التي نحصل عليها من مجموعة واحدة ضمن MatchResult الخاصة بالصنف Regex. MatchGroupCollection تمثل الواجهة MatchGroupCollection مجموعةً (collection) من الفئات المرصودة (captured groups) عند إجراء مطابقة واحدة لتعبير نمطي ما. MatchNamedGroupCollection توسع هذه الواجهة الصنف MatchGroupCollection عبر تعريف طريقةٍ لجلب المجموعات المتطابقة (matched groups) عن طريق أسمائها عندما يدعم regex ذلك. MatchResult تمثل الواجهة MatchResult نتائج مطابقة واحدة لتعبير نمطي. Regex يمثل الصنف Regex تعبيرًا نمطيا قابلًا للتعديل (immutable regular expression). إن أردت الاطلاع على المزيد من المعلومات المتعلقة بصياغة النمط (pattern)، ...

الخاصّيّات (Properties) وحقول البيانات (Fields) في لغة Kotlin

التصريح عن الخاصّيّات (Declaring Properties) قد تحتوي الأصناف في لغة Kotlin على الخاصّيّات المعرَّفة إما كقيمٍ متغيّرةٍ عبر الكلمة المفتاحيّة var أو كقيمٍ ثابتةٍ للقراءة فقط (read-only) عبر الكلمة المفتاحيّة val، مثل: class Address { var name: String = ... var street: String = ... var city: String = ... var state: String? = ... var zip: String = ... } إذ يُمكن الوصول للخصائص عبر اسمها ...

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

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

تبحث الدالة find()‎ عن أول محرف متطابق مع التعبير النمطي الذي استُدعي معها في سلسلة المحارف الممرَّرة إليها. يمكن البحث في سلسلة المحارف المعطاة بأكملها، أو يمكن بدء عملية البحث عند محرف معين. البنية العامة actual fun find( input: CharSequence, startIndex: Int = 0 ): MatchResult? تبحث الدالة find()‎ عن أول محرف متطابق مع التعبير النمطي الذي استُدعي معها في سلسلة المحارف input الممررة إليها. يمكن البحث في سلسلة المحارف المعطاة بأكملها، أو يمكن بدء ...

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

تتحقَّق الدالة single()‎ من حواية سلسلة المحارف التي استُدعيت معها محرفًا واحدًا فقط أو محرفًا واحدًا محققًا لشرط معيَّن ثمَّ تعيده أو تطلق استثناءً خلاف ذلك. البنية العامة fun CharSequence.single(): Char  inline fun CharSequence.single(     predicate: (Char) -> Boolean ): Char وجود الكلمة المفتاحية inline يدل على أن هذه الدالة مباشرة (للمزيد من التفاصيل، راجع صفحة الدوال المباشرة (inline functions)). المعاملات predicate دالة تطبق على كل محرف من محارف السلسلة المعطاة. يمرر إليها محرفٌ وتعيد قيمة منطقية مقابله له. القيم المعادة يعاد المحرف ...

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

تعيد الدالة toString()‎ سلسلة نصية تمثل الكائن الذي استدعيت معه. البنية العامة fun Any?.toString(): String القيم المعادة تعاد سلسلة نصيّة (string) تمثّل الكائن المُحدَّد. أمثلة استخدام الدالةtoString()‎ مع متغير بسيط: fun main(args: Array<String>) { var x = 5 println(x.toString()) // 5 } استخدام الدالة toString()‎ مع المصفوفات: import java.util.* fun main(args: Array<String>) { val nums = arrayOf(1, 2, 3, 4, 5) println(Arrays.toString(nums)) // [1, 2, 3, 4, 5] } انظر أيضًا الدالة hashCode()‎: ...

الدالة Double.toInt()‎ في Kotlin

تحوّل الدالة toInt()‎ العدد العشري المضاعف (double) الذي استُدعي معها إلى عدد صحيح (أي من النوع Int). هذا قد يؤدي إلى تدوير العدد المراد تحويله أو اقتطاع جزءٍ منه. البنية العامة fun toInt(): Int حلت الدالة Number.toInt()‎ مكان هذه الدالة. القيمة المعادة يعاد عدد صحيح (من النوع Int) يحوي العدد العشري المضاعف المراد تحويله. أمثلة استعمال الدالة ()toInt لتحويل عدد عشري مضاعف إلى عدد صحيح: fun main(args: Array<String>) { val x: Double = 52.6 ...

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

تحوّل الدالة toTitleCase()‎ المحرف الذي استٌدعي معها إلى محرف عنواني (titlecase). تتكون المحارف العنوانية عادةً من محرفين ملتصقين، مثل 'Dž' أو 'Nj'، إذ يعاملان وكأنَّهما محرفٌ واحدٌ فقط. البنية العامة inline fun Char.toTitleCase(): Char وجود الكلمة المفتاحية inline يدل على أنَّ هذه الدالة مباشرة (للمزيد من التفاصيل، ارجع إلى صفحة الدوال المباشرة (inline functions)). القيم المعادة يعاد الحرف Char المعطى بعد تحويله إلى حرف عنواني. أمثلة تُعرّف الشيفرة الآتية حرفًا باسم x ثم تستدعي الدالة toTitleCase()‎ معه، ثم تطبع الناتج: fun main(args: Array<String>) { ...

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

تنشئ الدالة zip()‎ أزواجًا من محارف سلسلتين لها نفس الفهرس، أو تنشئ قيمًا عبر تمرير عناصر لها نفس الفهرس تجلب من كائنين مختلفين إلى دالة معينة. البنية العامة infix fun CharSequence.zip( other: CharSequence ): List<Pair<Char, Char>> إن استدعيت الدالة zip()‎ مع سلسلة من المحارف ومع تمرير سلسلة أخرى إليها كمعامل، فستشكل أزواجًا من محارف هاتين السلسلتين لها نفس الفهرس وتضعها في قائمة؛ طول القائمة المعادة يساوي طول أٌقصرهما. inline fun <V> CharSequence.zip( other: CharSequence, transform: (a: Char, b: Char) -> V ): List<V> وإن ...

الثابت Char.MIN_SURROGATE في Kotlin

يمثل الثابت Char.MIN_SURROGATE القيمة الدنيا لبديل لعدد بتات الترميز الموحد (Unicode surrogate code unit). البنية العامة const val MIN_SURROGATE: Char انظر أيضًا الثابت Char.MAX_HIGH_SURROGATE: يمثّل القيمة القصوى للبديل الأعلى لوحدة اليونيكود (Unicode high-surrogate code unit). الثابت Char.MAX_LOW_SURROGATE: يمثل القيمة القصوى للبديل الأدنى لوحدة اليونيكود (Unicode low-surrogate code unit). الثابت Char.MAX_SURROGATE‎: يمثِّل القيمة القصوى لبديل وحدة اليونيكود (Unicode surrogate code unit). الثابت Char.MIN_HIGH_SURROGATE: يمثل القيمة الدنيا للبديل الأعلى لوحدة اليونيكود (Unicode high-surrogate code unit). الثابت Char.MIN_LOW_SURROGATE‎: يمثل القيمة الدنيا للبديل الأدنى ...

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

تتحقق الدالة isLetterOrDigit()‎ إن كان المحرف (character) الذي استٌدعي معها حرفًا أبجديًا أو رقمًا. البنية العامة inline fun Char.isLetterOrDigit(): Boolean المنصة المطلوبة: JVM. وجود الكلمة المفتاحية inline يدل على أنَّ هذه الدالة مباشرة (للمزيد من التفاصيل، ارجع إلى صفحة الدوال المباشرة (inline functions)). القيم المعادة تعاد القيمة true إن كان المحرف (character) المعطى حرفًا أبجديًا أو رقمًا، أو تعاد القيمة false خلاف ذلك. أمثلة استعمال الدالة isLetterOrDigit()‎ للتحقق من كون المحرف المراد استعماله حرفًا أبجديًا أو رقمًا: fun main(args: Array<String>) { val ...

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

تجلب الدالة elementAtOrNull()‎ عنصرًا ذي فهرس معيَّن من المصفوفة أو المجموعة التي استُدعيت معها. إن كان الفهرس المعطى خارج حدود المصفوفة أو المجموعة، فستُعيد الدالة القيمة العدمية null. البنية العامة يمكن استدعاء الدالةelementAtOrNull()‎ مع المصفوفات: inline fun <T> Array<out T>.elementAtOrNull(index: Int): T? inline fun ByteArray.elementAtOrNull(index: Int): Byte? inline fun ShortArray.elementAtOrNull(index: Int): Short? inline fun IntArray.elementAtOrNull(index: Int): Int? inline fun LongArray.elementAtOrNull(index: Int): Long? inline fun FloatArray.elementAtOrNull(index: Int): Float? inline fun DoubleArray.elementAtOrNull(index: Int): Double? inline fun BooleanArray.elementAtOrNull(index: Int): Boolean? inline fun CharArray.elementAtOrNull(index: Int): Char? ومع ...

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