الفرق بين المراجعتين لصفحة: «Kotlin/Topics»
ط ←بُنية لغة Kotlin =: خطأ مطبعي |
ط تعديل مصطلح متحول |
||
(5 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة) | |||
سطر 1: | سطر 1: | ||
== بُنية لغة Kotlin == | == بُنية لغة Kotlin == | ||
مشابهةٌ لبنية لغة البرمجة Java بوصفها كائنيّة التوجه (OOP)، وبالتالي فهي تعتمد أساسًا على وجود الأصناف (classes) التي تحتوي بدورها على الخاصّيّات (properties) والدوال (functions)، كما وتدعم Kotlin العلاقات فيما بينها مثل الوراثة (inheritance) من صنفٍ أعلى (superclass) أو التداخل فيما بينها (nesting classes)، وتمتاز بوجود مُحدِّدات الوصول (visibility modifiers) للتحكم بعمليات الوصول للبيانات المُخزَّنة، وكذلك فهي تعتمد في بُنيتها على الحزم (packages) والمكتبات (libraries) التي تحتوي على الدوال المساعدة عند الحاجة إليها، أمّا عن بُنية التعليمات والأوامر البرمجيّة فهي -كمِثل لغات البرمجة الأخرى- تحتوي على التعليمات الشرطيّة (conditionals) والحلقات (loops) وأوامر التحكم بالتدفق (control flow) مثل العودة (return) والاستمرار بالحلقة (continue) أو الخروج منها (break). | |||
مثال:<syntaxhighlight lang="kotlin"> | |||
fun main(args: Array<String>) { | |||
val first: Int = 10 | |||
val second: Int = 20 | |||
val sum = first + second | |||
println("The sum is: $sum") | |||
} | |||
</syntaxhighlight>يقوم برنامج Kotlin السابق بجمع قيمتي العددين <code>first</code> و <code>second</code> وإظهار ناتج جمعهما <code>sum</code>. | |||
== توافق Kotlin مع البيئات الأخرى == | == توافق Kotlin مع البيئات الأخرى == | ||
=== [[Kotlin/server overview|استخدام Kotlin في تطوير تطبيقات الخادم (Server)]] === | === [[Kotlin/server overview|استخدام Kotlin في تطوير تطبيقات الخادم (Server)]] === | ||
إذ تُستخدَم لغة Kotlin في تطوير تطبيقات الخادم Server ويمكن نشر التطبيقات المكتوبة بها ضمن أيّ مُضيف (host) يدعم تطبيقات Java للويب، وتستفيد من | إذ تُستخدَم لغة Kotlin في تطوير تطبيقات الخادم (Server) ويمكن نشر التطبيقات المكتوبة بها ضمن أيّ مُضيف (host) يدعم تطبيقات Java للويب، كما وتستفيد من عددٍ كبيرٍ من منصّات العمل مثل Spring و Vert.x وغيرها، وتمتاز بقابليتها للتوسّع. | ||
=== [[Kotlin/android overview|استخدام Kotlin في تطوير تطبيقات Android]] === | === [[Kotlin/android overview|استخدام Kotlin في تطوير تطبيقات Android]] === | ||
تُستخدَم لغة Kotlin في تطوير تطبيقات Android لقوتها | تُستخدَم لغة Kotlin في تطوير تطبيقات Android لقوتها من ناحية الأداء (performance) وصِغر حجم التخزين المستخدَم لتطبيقاتها، كما وتقبل الإضافات (plugins) في بيئة Android، مما يُسرِّع من عملية البرمجة والترجمة (compilation). | ||
=== [[Kotlin/js overview|استخدام Kotlin في بيئة لغة البرمجة JavaScript]] === | === [[Kotlin/js overview|استخدام Kotlin في بيئة لغة البرمجة JavaScript]] === | ||
تمتاز لغة Kotlin بسهولة تحويل شيفراتها إلى ما يماثلها في JavaScript | تمتاز لغة Kotlin بسهولة تحويل شيفراتها إلى ما يماثلها في JavaScript آخذةً بالحسبان الحجم المثاليّ للتخزين وتحقيق نفس الفعاليّة، إذ تتيح إمكانيّة التعامل مع عناصر DOM ومع الرسوميات بالاعتماد على WebGL. | ||
== البدء بلغة البرمجة Kotlin == | == البدء بلغة البرمجة Kotlin == | ||
=== [[Kotlin/basic syntax| | === [[Kotlin/basic syntax|بُنية البرمجة في Kotlin]] === | ||
تعتمد أساسًا على الحزم (packages) والأصناف (classes) والدوال (functions) | تعتمد أساسًا على الحزم (packages) والأصناف (classes) والدوال (functions) والمتغيِّرات بنوعيها var (بقيمة متغيّرة) و val (للقراءة فقط) والتعليقات (comments) التوضيحيّة التي تجعل البرنامج أسهل للقراءة، إضافةً إلى التعابير الشرطية (conditionals) والحلقات (loops) والمجالات (ranges) والمجموعات (collections) والتحويل ما بين الأنواع (casting). | ||
== [[Kotlin/idioms|الاصطلاحات العامّة في اللغة]] == | === [[Kotlin/idioms|الاصطلاحات العامّة في اللغة]] === | ||
إذ يُصطلح ما بين مبرمجي Kotlin على بعض البُنى البرمجيّة واستخداماتها بنفس الهدف | إذ يُصطلح ما بين مبرمجي Kotlin على بعض البُنى البرمجيّة واستخداماتها بنفس الهدف. | ||
== [[Kotlin/coding conventions|أنماط الشيفرات المُتعارَف عليها ما بين مبرمجي Kotlin]] == | === [[Kotlin/coding conventions|أنماط الشيفرات المُتعارَف عليها ما بين مبرمجي Kotlin]] === | ||
وهي الأنماط المُتَّفق عليها لكتابة الشيفرات في Kotlin وتشمل طرائق التنظيم، وقواعد التسمية، وكيفية | وهي الأنماط المُتَّفق عليها لكتابة الشيفرات في Kotlin وتشمل طرائق التنظيم، وقواعد التسمية، وكيفية التنسيق، إضافةً إلى التعليقات التوثيقيّة. | ||
== أساسيات البرمجة في Kotlin == | == أساسيات البرمجة في Kotlin == | ||
=== [[Kotlin/basic types|الأنواع الأساسية للبيانات]] === | === [[Kotlin/basic types|الأنواع الأساسية للبيانات]] === | ||
وهي تشمل الأعداد (Numbers)، والمحارف (Characters)، والقيم الثنائيّة (Booleans)، والمصفوفات (Arrays)، والسلاسل | وهي تشمل الأعداد (Numbers)، والمحارف (Characters)، والقيم الثنائيّة (Booleans)، والمصفوفات (Arrays)، والسلاسل النصيّة (Strings)، والقيم المباشرة للسلاسل النصيّة (Literals)، وقوالب السلاسل النصية (String Templates) وغيرها. | ||
=== [[Kotlin/packages|الحزم (packages) واستيرادها]] === | === [[Kotlin/packages|الحزم (packages) واستيرادها]] === | ||
إذ يمكن استيراد (import) الحزم والاستفادة مما تحتويه من | إذ يمكن استيراد (import) الحزم والاستفادة مما تحتويه من أصنافٍ ودوال. | ||
=== [[Kotlin/control flow|التحكم بالتدفق في سياق البرنامج]] === | === [[Kotlin/control flow|التحكم بالتدفق (Control Flow) في سياق البرنامج]] === | ||
عبر التعابير الشرطية مثل if و when وكذلك الحلقات مثل for و while و do-while. | عبر التعابير الشرطية مثل <code>if</code> و <code>when</code> وكذلك الحلقات مثل <code>for</code> و <code>while</code> و <code>do-while</code>. | ||
=== [[Kotlin/returns|أوامر العودة والقفز]] === | === [[Kotlin/returns|أوامر العودة (return) والقفز]] === | ||
وهي الأوامر التي تنقل سياق البرنامج من موقعٍ لآخر مثل return أو break أو continue. | وهي الأوامر التي تنقل سياق البرنامج من موقعٍ لآخر مثل <code>return</code> أو <code>break</code> أو <code>continue</code>. | ||
== الأصناف والكائنات == | == الأصناف (Classes) والكائنات (Objects) == | ||
=== [[Kotlin/classes|الأصناف والوراثة]] === | === [[Kotlin/classes|الأصناف والوراثة (Inheritance)]] === | ||
يُصرَّح عن الأصناف في لغة Kotlin | يُصرَّح عن الأصناف في لغة Kotlin لتُؤخذ نسخٌ عنها وهي ما يُعرف بالكائنات (objects) التي يكون الوصول من خلالها إلى الخاصّيّات والدوال الموجودة في الصنف، يحتوي الصنف على بانٍ رئيسيّ (primary constructor) واحدٍ وبانٍ ثانوي (secondary constructor) أو أكثر، وترتبط بعض الأصناف فيما بينها بعلاقة الوراثة أو التداخل (nesting)، وقد تكون الأصناف من النوع المُجرَّد (abstract). | ||
=== [[Kotlin/properties| | === [[Kotlin/properties|الخاصّيّات (Properties) وحقول البيانات]] === | ||
تحتوي الخاصيات على البيانات ويكون الوصول إليها عبر getter | تحتوي الخاصيات على البيانات الفعليّة ويكون الوصول إليها عبر getter وsetter، وتدعم لغة Kotlin كذلك الحقول (fields) والخاصّيّات المساعدة، وتمتاز بأمر التهيئة اللاحقة (late initializing) وإعادة تعريف الخاصّيّات (overriding). | ||
=== [[Kotlin/visibility modifiers| | === [[Kotlin/visibility modifiers|مُحدِّدات الوصول (Visibility Modifiers)]] === | ||
وهي المسؤولة عن تحديد | وهي المسؤولة عن تحديد إمكانيّة الوصول للخاصّيّات أو الدوال أو الأصناف وتشمل: النوع العام (<code>public</code>) والداخليّ (<code>internal</code>) والمحميّ (<code>protected</code>) والخاصّ (<code>private</code>). | ||
=== [[Kotlin/extensions|الإضافات]] === | === [[Kotlin/extensions|الإضافات (Extensions)]] === | ||
والتي تُضاف | والتي تُضاف إلى الدوال أو الخاصّيّات، وذلك لتجنُّب إعادة بنائها من جديد، وهي منفصلةٌ ستاتيكيًا، وقد تُجرَى كذلك بعض الإضافات على الكائنات المرافقة (companion objects). | ||
=== [[Kotlin/data classes|أصناف البيانات]] === | === [[Kotlin/data classes|أصناف البيانات (Data Classes)]] === | ||
وهي الأصناف المستخدمة لتخزين البيانات بشكلٍ أساسيّ في خاصّيّاتها، وتعتمد على بعض الدوال بما يتناسب مع المعاملات المُعرَّفة في الباني الأساسيّ (primary constructor) للصنف. | |||
=== [[Kotlin/sealed classes|الأصناف | === [[Kotlin/sealed classes|الأصناف المغلقة (Sealed Classes)]] === | ||
تُستخدَم الأصناف المُغلَقة (وهي أصناف مُجرَّدة) لتمثيل الهرميّة (hierarchy) المحدودة للأصناف، وبالتالي تُعدُّ هذه الأصناف إضافةً (extension) لأصناف الثوابت المُتعدَّدة (enum classes)، ويمكن أن يكون له عدّة أصنافٍ فرعيةٍ (subclasses) ضمن نفس الملف الموجود فيه. | |||
=== [[Kotlin/generics| | === [[Kotlin/generics|الأنواع المُعمَّمة (Generics)]] === | ||
وتعتمد بشكلٍ أساسيٍّ على التغيُّر في موقع التصريح (declaration-site variance) مما يجعل الأنواع covariant (نوع منتج <code>out</code>)، وكذلك على الأنواع المُسقَطة (type projection) مما يجعل الأنواع contravariant (نوع مستهلك <code>in</code>). | |||
=== [[Kotlin/nested classes|الأصناف المتداخلة (Nested Classes)]] === | === [[Kotlin/nested classes|الأصناف المتداخلة (Nested Classes)]] === | ||
وهي أن يقع صنفٌ ما في صنفٍ آخر خارجيّ محيط به، وقد تكون الأصناف داخليّةً (inner) أو مجهولة (annonymous). | |||
=== [[Kotlin/enum classes|أصناف الثوابت | === [[Kotlin/enum classes|أصناف الثوابت المٌتعدِّدة (Enum)]] === | ||
يتلخَّصُ الاستخدام الرئيسيّ لأصناف الثوابت المتعدَّدة في قدرتها على تعريف الاستخدام (implementing) للثوابت المتعدًّدة الحافظة للنوع (type-safe)، إذ تحتوي أصناف الثوابت المتعدِّدة (enum) في Kotlin على توابع تركيبية (synthetic methods) -كما هو في Java- مما يسمح بتعداد الثوابت المُتعدِّدة والوصول إلى أيّ ثابتٍ منها عبر اسمه. | |||
=== [[Kotlin/object declarations|الكائنات]] === | === [[Kotlin/object declarations|الكائنات (Objects)]] === | ||
حيث تتيح Kotlin إمكانيّة التصريح عن الكائنات (وقد تكون كائناتٍ مجهولةً) وذلك عند الحاجة لإنشاء كائنٍ بإجراء تعديلاتٍ طفيفةٍ على أحد الأصناف (classes) بدون التصريح عن صنفٍ فرعيٍّ (subclass) له، كما وتمتاز لغة Kotlin بدعمها للكائنات المرافقة (companion objects). | |||
=== [[Kotlin/delegation| | === [[Kotlin/delegation|الانتقال الفرعيّ / التعميم (Delegation)]] === | ||
وهو بمثابة بديلٍ جيّدٍ عن وراثة تعريف الاستخدام (implementation inheritance)، إذ تدعم لغة Kotlin هذه الميّزة بشكلٍ طبيعيّ دون الحاجة إلى أيّ نوع قياسيّ من الشيفرات. | |||
=== [[Kotlin/delegated properties| | === [[Kotlin/delegated properties|الخاصّيّات المُعمَّمة (Delegated Properties)]] === | ||
وهي الخاصّيّات التي يجري تعريف استخدامها مرةً واحدةً وتخزين هذا التعريف في المكتبة (library) للاستفادة منه كلما دعت الحاجة، ولها عدة أنواع: لخاصّيّات الكسولة (Lazy property) والخاصّيّات المُراقَبة (observable property) والعنصر map، كما وتحتوي مكتبة Kotlin القياسيّة على عددٍ من التوابع المُنتِجة (factory methods) لأنواع التعميمات المختلفة. | |||
== الدوال | == الدوال وتعابير lambdas == | ||
=== [[Kotlin/functions|الدوال]] === | === [[Kotlin/functions|الدوال (Functions)]] === | ||
وهي مماثلة للتوابع (methods) في لغة Java، وتحتوي على المعاملات (وقد تُجعل لها بعض القيم الافتراضيّة)، وتمتاز لغة Kotlin بوجود النوع <code>Unit</code> والذي هو النوع المُعاد للدالة التي لا تعيد أيّ قيمةٍ. | |||
=== [[Kotlin/lambdas| | === [[Kotlin/lambdas|تعابير Lambda]] === | ||
وهي بمثابة قيمةٍ حرفيّة (Literals) للدالة، وهي دالةٌ لا يُصرَّح عنها بل تُمرَّر كتعبيرٍ مباشرةً، وذلك بفضل دعم Kotlin لإمكانية تمرير الدوال كمعاملات (parameters) للدوال الأخرى. | |||
=== [[Kotlin/inline functions|الدوال | === [[Kotlin/inline functions|الدوال المباشرة (Inline Functions)]] === | ||
وهي ميزة جعل الدوال كتعابيرٍ مباشرة في موقع الاستدعاء بالاعتماد على تعابير lambda، كما وتدعم Kotlin المتغيِّرات من النوع <code>reified</code> . | |||
=== [[Kotlin/coroutines|الروتينات المساعدة ( | === [[Kotlin/coroutines|الروتينات المساعدة (Coroutines)]] === | ||
توفر الروتينات المساعدة طريقةً لمنع المعالجة (thread) من إبطاء العمل الكليّ، وذلك بعملية أقلَّ كلفةً وأكثر قابليّة للتحكم، وهي إمكانية تأجليه (suspend) بالاعتماد الروتينات المساعدة. | |||
== متفرقات == | == متفرقات == | ||
=== [[Kotlin/multi declarations|التصريحات | === [[Kotlin/multi declarations|التصريحات المُتعدِّدة (Multi Declarations)]] === | ||
وهي إمكانية التصريح بالتفكيك (destructuring) والتي تسمح بتفكيك الكائن إلى عددٍ من المعاملات يُسمح باستخدامها بشكلٍ مستقلٍ تمامًا، ويستفاد من التفكيك بتعابير lambda. | |||
=== [[Kotlin/collections|المجموعات (Collections)]] === | === [[Kotlin/collections|المجموعات (Collections)]] === | ||
تُستخدم بهدف تجميعٍ للبيانات ضمن بُنى محدَّدة مثل: القائمة (List) والمجموعة (Set) و الخارطة (Map) والتي تُنشَأ بسهولة باستدعاء التوابع الموجودة في المكتبة القياسيّة. | |||
=== [[Kotlin/ranges|المجالات (Ranges)]] === | === [[Kotlin/ranges|المجالات (Ranges)]] === | ||
تعبِّر عن المفهوم الرياضيّ للمجال المُغلَق (يشمل قيمتيّ البداية والنهاية) والمُعرَّفِ للقيم القابلة للمقارنة (comparable)، وله نقطتان تُحدِّدانه: البداية <code>start</code> والنهاية <code>endInclusive</code>(المُتضمَّنة في المجال)، و تكون <code>contains</code> العمليةَ الأساسيّة المُستخدمَة فيها وهي تعتمد على صيغةٍ تستخدم المعاملين <code>in</code>و <code>!in</code>. | |||
=== [[Kotlin/typecasts| | === [[Kotlin/typecasts|التحقُّق من الأنواع والتحويل فيما بينها (Casting)]] === | ||
وهي العمليات المستخدمة للتأكد من انتماء الكائن لنوعٍ مُحدَّدٍ من البيانات، كما وتدعم Kotlin التحويلات الذكية (smart casts) والآمنة ما بين الأنواع المختلفة. | |||
=== [[Kotlin/this expressions|تعبير <code>this</code>]] === | === [[Kotlin/this expressions|تعبير <code>this</code>]] === | ||
الذي يُستخدَم بشكل رئيسيّ لتحديد المستقبِل (receiver) والذي قد يكون الكائن (object) الحاليّ أو المجال الخارجيّ في حال استخدام تعبير this المُقيَّد. | |||
=== [[Kotlin/equality|التساوي]] === | === [[Kotlin/equality|التساوي (Equality)]] === | ||
إذ تحتوي لغة Kotlin على نوعين من التساوي: البنيويّ (structural) للتأكد من تساوي القيمة، والمرجعيّ (referential) للتأكد من الإشارة لنفس الكائن (object). | |||
=== [[Kotlin/operator overloading|التحميل الزائد للمعاملات (Operators Overloading)]] === | === [[Kotlin/operator overloading|التحميل الزائد للمعاملات (Operators Overloading)]] === | ||
إذ تُعدُّ المعاملات أهم ما في لغة البرمجة بشكلٍ عامٍ، وتُتيح لغة Kotlin إجراءَ مجموعةٍ مُعرَّفة مسبقًا من العمليات على أنواع البيانات المختلفة وذلك باستخدام رموزٍ ثابتةٍ تعتمدها لتقوم باستدعاء الدوال الموافقة لها والمسؤولة عن القيام بالعملية المطلوبة. | |||
=== [[Kotlin/null safety|التحقّق من Null]] === | === [[Kotlin/null safety|التحقّق من Null]] === | ||
تدعم Kotlin النوع المميز nullable وذلك بهدف الحدِّ من أخطار القيمة الفارغة <code>null</code> في الشيفرات، إذ إنّ أحد الأخطاء الأكثر شيوعًا في لغات البرمجة هو محاولة الوصول إلى مرجعيّةٍ تحتوي على القيمة <code>null</code> وسيؤدي إلى حدوث استثناءٍ (exception)، لذلك توفّر Kotlin إمكانية الاستدعاء الآمن (safe call). | |||
=== [[Kotlin/exceptions|الاستثناءات (Exceptions)]] === | === [[Kotlin/exceptions|الاستثناءات (Exceptions)]] === | ||
تعتمد Kotlin على البنية المعروفة بالأقسام الثلاثة <code>try</code>/<code>catch</code>/<code>finally</code> لمعالجة الاستثناءات التي قد تحدث. | |||
=== [[ | === [[Kotlin/annotations|التوصيفات (Annontations)]] === | ||
تدعم لغة Kotlin التوصيفات والتي هي إحدى الوسائل المستخدمة لإضافة بياناتٍ توصيفيّةٍ (metadata) إلى الشيفرة وتُسبَق بالرمز <code>@</code> للدلالة عليها. | |||
=== [[Kotlin/reflection|Reflection]] === | === [[Kotlin/reflection|الانعكاسات (Reflection)]] === | ||
هو مجموعةٌ من مميّزات اللغة والمكتبات التي تسمح بمراقبة بُنية البرنامج أثناء التنفيذ، وهي بالنهاية مرجعيّة تشير للصنف (class) أو الدالة (function) أو الخاصّيّة (property) أو الباني (constructor). | |||
=== [[Kotlin/type safe builders| | === [[Kotlin/type safe builders|المنشِئ الحافظ للنوع (Type-safe Builder)]] === | ||
يسمح المُنشِئ الحافظ للنوع ببناء لغات مُخصَّصة المجال (DSL) بالاعتماد على Kotlin، بما يتناسب مع إنشاء بُنى البيانات الهرميّة المعقَّدة مثل توليد ترميز [[HTML]] أو تصميم واجهات المستخدم أو ضبط مسارات خادم الويب. | |||
=== [[Kotlin/type aliases| | === [[Kotlin/type aliases|التسمية البديلة الأنواع (Type Aliases)]] === | ||
تدعم لغة Kotlin ميّزة التسمية البديلة للأنواع الموجودة للبيانات، وخاصّة إن كان اسم النوع طويلًا فيُستعاض عنه باسمٍ أقصرٍ ويُستخدَم الاسم الجديد في كتابة الشيفرات. | |||
=== [[Kotlin/multiplatform|المشاريع | === [[Kotlin/multiplatform|المشاريع متعدِّدة المنصّات (Multi platforms)]] === | ||
يسمح مشروع Kotlin متعدّد المنصّات بترجمة الشيفرة ذاتها إلى عدّة منصّاتٍ للعمل (platforms)، وتدعم Kotlin حاليًا البيئات: JVM و JavaScript، إذ يحتوي المشروع على وحدةٍ مشتركةٍ لكافة منصّات العمل، ووحدات مُخصَّصة لكل منصّة يشملها المشروع. | |||
== مرجعيّات == | == مرجعيّات (References) == | ||
=== [[Kotlin/keyword reference|الكلمات | === [[Kotlin/keyword reference|الكلمات المفتاحيّة (Keywords) والمعاملات (Operators) في اللغة]] === | ||
سردٌ للكلمات المفتاحيّة والمعاملات الموجودة في لغة Kotlin وتوضيح استخداماتها. | |||
=== [[Kotlin/faq|الأسئلة الشائعة]] === | === [[Kotlin/faq|الأسئلة الشائعة حول Kotlin]] === | ||
تجد هنا إجابةً للكثير من التساؤلات التي تجول في رأسك حول لغة Kotlin. | |||
=== [[Kotlin/comparison to java|مقارنة مع لغة Java]] === | === [[Kotlin/comparison to java|مقارنة مع لغة Java]] === | ||
عرضٌ لمميزات كلِّ منهما ومقارنةٌ بسيطةٌ بينهما. |
المراجعة الحالية بتاريخ 18:05، 4 يوليو 2018
بُنية لغة Kotlin
مشابهةٌ لبنية لغة البرمجة Java بوصفها كائنيّة التوجه (OOP)، وبالتالي فهي تعتمد أساسًا على وجود الأصناف (classes) التي تحتوي بدورها على الخاصّيّات (properties) والدوال (functions)، كما وتدعم Kotlin العلاقات فيما بينها مثل الوراثة (inheritance) من صنفٍ أعلى (superclass) أو التداخل فيما بينها (nesting classes)، وتمتاز بوجود مُحدِّدات الوصول (visibility modifiers) للتحكم بعمليات الوصول للبيانات المُخزَّنة، وكذلك فهي تعتمد في بُنيتها على الحزم (packages) والمكتبات (libraries) التي تحتوي على الدوال المساعدة عند الحاجة إليها، أمّا عن بُنية التعليمات والأوامر البرمجيّة فهي -كمِثل لغات البرمجة الأخرى- تحتوي على التعليمات الشرطيّة (conditionals) والحلقات (loops) وأوامر التحكم بالتدفق (control flow) مثل العودة (return) والاستمرار بالحلقة (continue) أو الخروج منها (break).
مثال:
fun main(args: Array<String>) {
val first: Int = 10
val second: Int = 20
val sum = first + second
println("The sum is: $sum")
}
يقوم برنامج Kotlin السابق بجمع قيمتي العددين first
و second
وإظهار ناتج جمعهما sum
.
توافق Kotlin مع البيئات الأخرى
استخدام Kotlin في تطوير تطبيقات الخادم (Server)
إذ تُستخدَم لغة Kotlin في تطوير تطبيقات الخادم (Server) ويمكن نشر التطبيقات المكتوبة بها ضمن أيّ مُضيف (host) يدعم تطبيقات Java للويب، كما وتستفيد من عددٍ كبيرٍ من منصّات العمل مثل Spring و Vert.x وغيرها، وتمتاز بقابليتها للتوسّع.
استخدام Kotlin في تطوير تطبيقات Android
تُستخدَم لغة Kotlin في تطوير تطبيقات Android لقوتها من ناحية الأداء (performance) وصِغر حجم التخزين المستخدَم لتطبيقاتها، كما وتقبل الإضافات (plugins) في بيئة Android، مما يُسرِّع من عملية البرمجة والترجمة (compilation).
استخدام Kotlin في بيئة لغة البرمجة JavaScript
تمتاز لغة Kotlin بسهولة تحويل شيفراتها إلى ما يماثلها في JavaScript آخذةً بالحسبان الحجم المثاليّ للتخزين وتحقيق نفس الفعاليّة، إذ تتيح إمكانيّة التعامل مع عناصر DOM ومع الرسوميات بالاعتماد على WebGL.
البدء بلغة البرمجة Kotlin
بُنية البرمجة في Kotlin
تعتمد أساسًا على الحزم (packages) والأصناف (classes) والدوال (functions) والمتغيِّرات بنوعيها var (بقيمة متغيّرة) و val (للقراءة فقط) والتعليقات (comments) التوضيحيّة التي تجعل البرنامج أسهل للقراءة، إضافةً إلى التعابير الشرطية (conditionals) والحلقات (loops) والمجالات (ranges) والمجموعات (collections) والتحويل ما بين الأنواع (casting).
الاصطلاحات العامّة في اللغة
إذ يُصطلح ما بين مبرمجي Kotlin على بعض البُنى البرمجيّة واستخداماتها بنفس الهدف.
أنماط الشيفرات المُتعارَف عليها ما بين مبرمجي Kotlin
وهي الأنماط المُتَّفق عليها لكتابة الشيفرات في Kotlin وتشمل طرائق التنظيم، وقواعد التسمية، وكيفية التنسيق، إضافةً إلى التعليقات التوثيقيّة.
أساسيات البرمجة في Kotlin
الأنواع الأساسية للبيانات
وهي تشمل الأعداد (Numbers)، والمحارف (Characters)، والقيم الثنائيّة (Booleans)، والمصفوفات (Arrays)، والسلاسل النصيّة (Strings)، والقيم المباشرة للسلاسل النصيّة (Literals)، وقوالب السلاسل النصية (String Templates) وغيرها.
الحزم (packages) واستيرادها
إذ يمكن استيراد (import) الحزم والاستفادة مما تحتويه من أصنافٍ ودوال.
التحكم بالتدفق (Control Flow) في سياق البرنامج
عبر التعابير الشرطية مثل if
و when
وكذلك الحلقات مثل for
و while
و do-while
.
أوامر العودة (return) والقفز
وهي الأوامر التي تنقل سياق البرنامج من موقعٍ لآخر مثل return
أو break
أو continue
.
الأصناف (Classes) والكائنات (Objects)
الأصناف والوراثة (Inheritance)
يُصرَّح عن الأصناف في لغة Kotlin لتُؤخذ نسخٌ عنها وهي ما يُعرف بالكائنات (objects) التي يكون الوصول من خلالها إلى الخاصّيّات والدوال الموجودة في الصنف، يحتوي الصنف على بانٍ رئيسيّ (primary constructor) واحدٍ وبانٍ ثانوي (secondary constructor) أو أكثر، وترتبط بعض الأصناف فيما بينها بعلاقة الوراثة أو التداخل (nesting)، وقد تكون الأصناف من النوع المُجرَّد (abstract).
الخاصّيّات (Properties) وحقول البيانات
تحتوي الخاصيات على البيانات الفعليّة ويكون الوصول إليها عبر getter وsetter، وتدعم لغة Kotlin كذلك الحقول (fields) والخاصّيّات المساعدة، وتمتاز بأمر التهيئة اللاحقة (late initializing) وإعادة تعريف الخاصّيّات (overriding).
مُحدِّدات الوصول (Visibility Modifiers)
وهي المسؤولة عن تحديد إمكانيّة الوصول للخاصّيّات أو الدوال أو الأصناف وتشمل: النوع العام (public
) والداخليّ (internal
) والمحميّ (protected
) والخاصّ (private
).
الإضافات (Extensions)
والتي تُضاف إلى الدوال أو الخاصّيّات، وذلك لتجنُّب إعادة بنائها من جديد، وهي منفصلةٌ ستاتيكيًا، وقد تُجرَى كذلك بعض الإضافات على الكائنات المرافقة (companion objects).
أصناف البيانات (Data Classes)
وهي الأصناف المستخدمة لتخزين البيانات بشكلٍ أساسيّ في خاصّيّاتها، وتعتمد على بعض الدوال بما يتناسب مع المعاملات المُعرَّفة في الباني الأساسيّ (primary constructor) للصنف.
الأصناف المغلقة (Sealed Classes)
تُستخدَم الأصناف المُغلَقة (وهي أصناف مُجرَّدة) لتمثيل الهرميّة (hierarchy) المحدودة للأصناف، وبالتالي تُعدُّ هذه الأصناف إضافةً (extension) لأصناف الثوابت المُتعدَّدة (enum classes)، ويمكن أن يكون له عدّة أصنافٍ فرعيةٍ (subclasses) ضمن نفس الملف الموجود فيه.
الأنواع المُعمَّمة (Generics)
وتعتمد بشكلٍ أساسيٍّ على التغيُّر في موقع التصريح (declaration-site variance) مما يجعل الأنواع covariant (نوع منتج out
)، وكذلك على الأنواع المُسقَطة (type projection) مما يجعل الأنواع contravariant (نوع مستهلك in
).
الأصناف المتداخلة (Nested Classes)
وهي أن يقع صنفٌ ما في صنفٍ آخر خارجيّ محيط به، وقد تكون الأصناف داخليّةً (inner) أو مجهولة (annonymous).
أصناف الثوابت المٌتعدِّدة (Enum)
يتلخَّصُ الاستخدام الرئيسيّ لأصناف الثوابت المتعدَّدة في قدرتها على تعريف الاستخدام (implementing) للثوابت المتعدًّدة الحافظة للنوع (type-safe)، إذ تحتوي أصناف الثوابت المتعدِّدة (enum) في Kotlin على توابع تركيبية (synthetic methods) -كما هو في Java- مما يسمح بتعداد الثوابت المُتعدِّدة والوصول إلى أيّ ثابتٍ منها عبر اسمه.
الكائنات (Objects)
حيث تتيح Kotlin إمكانيّة التصريح عن الكائنات (وقد تكون كائناتٍ مجهولةً) وذلك عند الحاجة لإنشاء كائنٍ بإجراء تعديلاتٍ طفيفةٍ على أحد الأصناف (classes) بدون التصريح عن صنفٍ فرعيٍّ (subclass) له، كما وتمتاز لغة Kotlin بدعمها للكائنات المرافقة (companion objects).
الانتقال الفرعيّ / التعميم (Delegation)
وهو بمثابة بديلٍ جيّدٍ عن وراثة تعريف الاستخدام (implementation inheritance)، إذ تدعم لغة Kotlin هذه الميّزة بشكلٍ طبيعيّ دون الحاجة إلى أيّ نوع قياسيّ من الشيفرات.
الخاصّيّات المُعمَّمة (Delegated Properties)
وهي الخاصّيّات التي يجري تعريف استخدامها مرةً واحدةً وتخزين هذا التعريف في المكتبة (library) للاستفادة منه كلما دعت الحاجة، ولها عدة أنواع: لخاصّيّات الكسولة (Lazy property) والخاصّيّات المُراقَبة (observable property) والعنصر map، كما وتحتوي مكتبة Kotlin القياسيّة على عددٍ من التوابع المُنتِجة (factory methods) لأنواع التعميمات المختلفة.
الدوال وتعابير lambdas
الدوال (Functions)
وهي مماثلة للتوابع (methods) في لغة Java، وتحتوي على المعاملات (وقد تُجعل لها بعض القيم الافتراضيّة)، وتمتاز لغة Kotlin بوجود النوع Unit
والذي هو النوع المُعاد للدالة التي لا تعيد أيّ قيمةٍ.
تعابير Lambda
وهي بمثابة قيمةٍ حرفيّة (Literals) للدالة، وهي دالةٌ لا يُصرَّح عنها بل تُمرَّر كتعبيرٍ مباشرةً، وذلك بفضل دعم Kotlin لإمكانية تمرير الدوال كمعاملات (parameters) للدوال الأخرى.
الدوال المباشرة (Inline Functions)
وهي ميزة جعل الدوال كتعابيرٍ مباشرة في موقع الاستدعاء بالاعتماد على تعابير lambda، كما وتدعم Kotlin المتغيِّرات من النوع reified
.
الروتينات المساعدة (Coroutines)
توفر الروتينات المساعدة طريقةً لمنع المعالجة (thread) من إبطاء العمل الكليّ، وذلك بعملية أقلَّ كلفةً وأكثر قابليّة للتحكم، وهي إمكانية تأجليه (suspend) بالاعتماد الروتينات المساعدة.
متفرقات
التصريحات المُتعدِّدة (Multi Declarations)
وهي إمكانية التصريح بالتفكيك (destructuring) والتي تسمح بتفكيك الكائن إلى عددٍ من المعاملات يُسمح باستخدامها بشكلٍ مستقلٍ تمامًا، ويستفاد من التفكيك بتعابير lambda.
المجموعات (Collections)
تُستخدم بهدف تجميعٍ للبيانات ضمن بُنى محدَّدة مثل: القائمة (List) والمجموعة (Set) و الخارطة (Map) والتي تُنشَأ بسهولة باستدعاء التوابع الموجودة في المكتبة القياسيّة.
المجالات (Ranges)
تعبِّر عن المفهوم الرياضيّ للمجال المُغلَق (يشمل قيمتيّ البداية والنهاية) والمُعرَّفِ للقيم القابلة للمقارنة (comparable)، وله نقطتان تُحدِّدانه: البداية start
والنهاية endInclusive
(المُتضمَّنة في المجال)، و تكون contains
العمليةَ الأساسيّة المُستخدمَة فيها وهي تعتمد على صيغةٍ تستخدم المعاملين in
و !in
.
التحقُّق من الأنواع والتحويل فيما بينها (Casting)
وهي العمليات المستخدمة للتأكد من انتماء الكائن لنوعٍ مُحدَّدٍ من البيانات، كما وتدعم Kotlin التحويلات الذكية (smart casts) والآمنة ما بين الأنواع المختلفة.
تعبير this
الذي يُستخدَم بشكل رئيسيّ لتحديد المستقبِل (receiver) والذي قد يكون الكائن (object) الحاليّ أو المجال الخارجيّ في حال استخدام تعبير this المُقيَّد.
التساوي (Equality)
إذ تحتوي لغة Kotlin على نوعين من التساوي: البنيويّ (structural) للتأكد من تساوي القيمة، والمرجعيّ (referential) للتأكد من الإشارة لنفس الكائن (object).
التحميل الزائد للمعاملات (Operators Overloading)
إذ تُعدُّ المعاملات أهم ما في لغة البرمجة بشكلٍ عامٍ، وتُتيح لغة Kotlin إجراءَ مجموعةٍ مُعرَّفة مسبقًا من العمليات على أنواع البيانات المختلفة وذلك باستخدام رموزٍ ثابتةٍ تعتمدها لتقوم باستدعاء الدوال الموافقة لها والمسؤولة عن القيام بالعملية المطلوبة.
التحقّق من Null
تدعم Kotlin النوع المميز nullable وذلك بهدف الحدِّ من أخطار القيمة الفارغة null
في الشيفرات، إذ إنّ أحد الأخطاء الأكثر شيوعًا في لغات البرمجة هو محاولة الوصول إلى مرجعيّةٍ تحتوي على القيمة null
وسيؤدي إلى حدوث استثناءٍ (exception)، لذلك توفّر Kotlin إمكانية الاستدعاء الآمن (safe call).
الاستثناءات (Exceptions)
تعتمد Kotlin على البنية المعروفة بالأقسام الثلاثة try
/catch
/finally
لمعالجة الاستثناءات التي قد تحدث.
التوصيفات (Annontations)
تدعم لغة Kotlin التوصيفات والتي هي إحدى الوسائل المستخدمة لإضافة بياناتٍ توصيفيّةٍ (metadata) إلى الشيفرة وتُسبَق بالرمز @
للدلالة عليها.
الانعكاسات (Reflection)
هو مجموعةٌ من مميّزات اللغة والمكتبات التي تسمح بمراقبة بُنية البرنامج أثناء التنفيذ، وهي بالنهاية مرجعيّة تشير للصنف (class) أو الدالة (function) أو الخاصّيّة (property) أو الباني (constructor).
المنشِئ الحافظ للنوع (Type-safe Builder)
يسمح المُنشِئ الحافظ للنوع ببناء لغات مُخصَّصة المجال (DSL) بالاعتماد على Kotlin، بما يتناسب مع إنشاء بُنى البيانات الهرميّة المعقَّدة مثل توليد ترميز HTML أو تصميم واجهات المستخدم أو ضبط مسارات خادم الويب.
التسمية البديلة الأنواع (Type Aliases)
تدعم لغة Kotlin ميّزة التسمية البديلة للأنواع الموجودة للبيانات، وخاصّة إن كان اسم النوع طويلًا فيُستعاض عنه باسمٍ أقصرٍ ويُستخدَم الاسم الجديد في كتابة الشيفرات.
المشاريع متعدِّدة المنصّات (Multi platforms)
يسمح مشروع Kotlin متعدّد المنصّات بترجمة الشيفرة ذاتها إلى عدّة منصّاتٍ للعمل (platforms)، وتدعم Kotlin حاليًا البيئات: JVM و JavaScript، إذ يحتوي المشروع على وحدةٍ مشتركةٍ لكافة منصّات العمل، ووحدات مُخصَّصة لكل منصّة يشملها المشروع.
مرجعيّات (References)
الكلمات المفتاحيّة (Keywords) والمعاملات (Operators) في اللغة
سردٌ للكلمات المفتاحيّة والمعاملات الموجودة في لغة Kotlin وتوضيح استخداماتها.
الأسئلة الشائعة حول Kotlin
تجد هنا إجابةً للكثير من التساؤلات التي تجول في رأسك حول لغة Kotlin.
مقارنة مع لغة Java
عرضٌ لمميزات كلِّ منهما ومقارنةٌ بسيطةٌ بينهما.