كوتلن (لغة برمجة)
| نموذج | متعدد النماذج : موجه نحو الكائنات ، وظيفي ، أمر ، هيكلي ، تصريحي ، عام ، عاكس ، متزامن |
|---|---|
| صمم بواسطة | جيت برينز |
| المطور | جيت برينز |
| ظهرت لأول مرة | 22 يوليو 2011 |
| إصدار مستقر | 2.0.20 [1]
/ 22 أغسطس 2024 |
| الانضباط في الطباعة | مستنتج ، ثابت ، قوي |
| منصة |
|
| نظام التشغيل | متعدد المنصات |
| رخصة | أباتشي 2.0 |
| ملحقات اسم الملف | .kt، .kts، .kexe، .klib |
| موقع إلكتروني | kotlinlang.org |
| متأثر بـ | |
| متأثر | |
| ف (فلانج) | |
Kotlin ( / ˈkɒtlɪn / ) [2] هي لغة برمجة عالية المستوى متعددة الأنظمة ، ذات كتابة ثابتة ، متعددة الأغراض مع استدلال النوع . تم تصميم Kotlin للتفاعل الكامل مع Java ، وتعتمد نسخة JVM من مكتبة Kotlin القياسية على مكتبة Java Class Library ، لكن استدلال النوع يسمح لقواعدها النحوية بأن تكون أكثر إيجازًا. تستهدف Kotlin بشكل أساسي JVM، ولكنها تُجمِّع أيضًا إلى JavaScript (على سبيل المثال، لتطبيقات الويب الأمامية التي تستخدم React ) [3] أو الكود الأصلي عبر LLVM (على سبيل المثال، لتطبيقات iOS الأصلية التي تشارك منطق العمل مع تطبيقات Android ). [4] تتحمل JetBrains تكاليف تطوير اللغة ، بينما تحمي مؤسسة Kotlin العلامة التجارية Kotlin. [5]
في 7 مايو 2019، أعلنت جوجل أن لغة برمجة كوتلين أصبحت لغتها المفضلة لمطوري تطبيقات أندرويد . [6] منذ إصدار أندرويد ستوديو 3.0 في أكتوبر 2017، تم تضمين كوتلين كبديل لمترجم جافا القياسي . يصدر مترجم أندرويد كوتلين بايت كود جافا 8 افتراضيًا (الذي يعمل في أي JVM لاحق)، ولكنه يسمح باستهداف جافا 9 حتى 20، لتحسين الأداء، [7] أو يسمح بمزيد من الميزات؛ لديه دعم قابلية التشغيل البيني لفئة التسجيل ثنائية الاتجاه لـ JVM، والذي تم تقديمه في جافا 16، والذي يعتبر مستقرًا اعتبارًا من كوتلين 1.5.
يدعم Kotlin الويب باستخدام Kotlin/JS، من خلال واجهة خلفية تعتمد على التمثيل الوسيط والتي تم إعلانها مستقرة منذ الإصدار 1.8، الذي تم إصداره في ديسمبر 2022. تم إعلان Kotlin/Native (على سبيل المثال دعم Apple silicon ) مستقرة منذ الإصدار 1.9.20، الذي تم إصداره في نوفمبر 2023. [8] [9]
تاريخ


اسم
الاسم مشتق من جزيرة كوتلين ، وهي جزيرة روسية في خليج فنلندا ، بالقرب من سانت بطرسبرغ . ذكر أندريه بريسلاف، كبير مصممي كوتلين السابق، أن الفريق قرر تسميتها على اسم جزيرة، تقليدًا للغة برمجة جافا التي تشترك في الاسم مع جزيرة جافا الإندونيسية . [ 10]
تطوير
في يوليو 2011، كشفت JetBrains عن مشروع Kotlin، وهي لغة جديدة لـ JVM، والتي كانت قيد التطوير لمدة عام. [11] قال دميتري جيميروف، رئيس JetBrains، إن معظم اللغات لا تحتوي على الميزات التي كانوا يبحثون عنها، باستثناء Scala . ومع ذلك، فقد استشهد بوقت التجميع البطيء لـ Scala باعتباره عيبًا. [11] أحد الأهداف المعلنة لـ Kotlin هو التجميع بسرعة Java. في فبراير 2012 ، قامت JetBrains بجعل المشروع مفتوح المصدر بموجب ترخيص Apache 2. [12]
كانت شركة JetBrains تأمل أن تعمل اللغة الجديدة على تعزيز مبيعات IntelliJ IDEA . [13]
كان أول التزام بمستودع Kotlin Git في 8 نوفمبر 2010. [14]
تم إصدار Kotlin 1.0 في 15 فبراير 2016. [15] ويعتبر هذا أول إصدار مستقر رسميًا وقد التزمت JetBrains بالتوافق مع الإصدارات السابقة على المدى الطويل بدءًا من هذا الإصدار.
في مؤتمر Google I/O 2017، أعلنت Google عن دعم من الدرجة الأولى لـ Kotlin على Android . [16]
تم إصدار Kotlin 1.2 في 28 نوفمبر 2017. [17] تمت إضافة ميزة مشاركة الكود بين منصات JVM وJavaScript حديثًا إلى هذا الإصدار (البرمجة متعددة المنصات هي الآن ميزة تجريبية [ 18] تمت ترقيتها من "تجريبية"). تم عمل عرض توضيحي كامل باستخدام Kotlin/JS Gradle Plugin الجديد. [19] [20]
تم إصدار Kotlin 1.3 في 29 أكتوبر 2018، مضيفًا دعمًا للبرامج الفرعية للاستخدام مع البرمجة غير المتزامنة . [21]
في 7 مايو 2019، أعلنت جوجل أن لغة برمجة Kotlin هي الآن لغتها المفضلة لمطوري تطبيقات Android. [6]
تم إصدار Kotlin 1.4 في أغسطس 2020، مع بعض التغييرات الطفيفة على سبيل المثال في دعم منصات Apple، أي في Objective-C / Swift interop . [22]
تم إصدار Kotlin 1.5 في مايو 2021.
تم إصدار Kotlin 1.6 في نوفمبر 2021.
تم إصدار Kotlin 1.7 في يونيو 2022، بما في ذلك الإصدار التجريبي من مُجمِّع Kotlin K2 الجديد . [23]
تم إصدار Kotlin 1.8 في ديسمبر 2022، وتم إصدار 1.8.0 في 11 يناير 2023. [24]
تم إصدار Kotlin 1.9 في يوليو 2023، وتم إصدار 1.9.0 في 6 يوليو 2023. [25]
تم إصدار Kotlin 2.0 في مايو 2024، وتم إصدار 2.0.0 في 21 مايو 2024. [26]
تصميم
صرح أندريه بريسلاف، قائد التطوير، أن Kotlin صُممت لتكون لغة موجهة للكائنات ذات قوة صناعية ، و"لغة أفضل" من Java ، ولكنها لا تزال متوافقة تمامًا مع كود Java، مما يسمح للشركات بالانتقال التدريجي من Java إلى Kotlin. [27]
بالاستعارة من سكالا ، فإن الفواصل المنقوطة اختيارية كعلامة إنهاء للجمل ؛ في معظم الحالات، يكون السطر الجديد كافيًا لكي يستنتج المترجم أن الجملة قد انتهت. [28]
بالاستعانة بسكالا ، تأتي إعلانات المتغيرات وقوائم المعلمات في Kotlin بعد اسم المتغير (مع فاصل نقطتين )، على غرار Ada و BASIC و Pascal و TypeScript و Rust . وفقًا لمقال من تأليف رومان إليزاروف، قائد المشروع الحالي، يؤدي هذا إلى محاذاة أسماء المتغيرات ويكون أكثر إرضاءً للعين، خاصةً عندما يكون هناك عدد قليل من إعلانات المتغيرات على التوالي، ويكون أحد الأنواع أو أكثر معقدًا للغاية لاستنتاج النوع، أو يحتاج إلى الإعلان صراحةً حتى يتمكن القراء من فهمه. [29] [30]
بالاقتراض من Scala ، يمكن أن تكون المتغيرات في Kotlin للقراءة فقط، ويتم إعلانها باستخدام الكلمة الأساسية val ، أو قابلة للتغيير ، ويتم إعلانها باستخدام الكلمة الأساسية var . [31]
بالاقتراض من Scala ، تكون أعضاء الفئة عامة بشكل افتراضي، وتكون الفئات نفسها نهائية بشكل افتراضي، مما يعني أن إنشاء فئة مشتقة معطل ما لم يتم إعلان الفئة الأساسية باستخدام الكلمة الأساسية open .
بالإضافة إلى الفئات والوظائف الأعضاء (والتي تعادل الطرق) في البرمجة الموجهة للكائنات، تدعم Kotlin أيضًا البرمجة الإجرائية باستخدام الوظائف . [32] تدعم وظائف Kotlin والمنشئون الوسائط الافتراضية وقوائم الوسائط ذات الطول المتغير والوسائط المسماة والتحميل الزائد بالتوقيع الفريد. وظائف أعضاء الفئة افتراضية، أي يتم إرسالها بناءً على نوع وقت التشغيل للكائن الذي يتم استدعاؤها عليه.
أضافت Kotlin 1.3 دعمًا للعقود، [33] والتي تعد مستقرة لإعلانات المكتبة القياسية، ولكنها لا تزال تجريبية للإعلانات التي يحددها المستخدم. تستلهم العقود من نموذج برمجة التصميم بالعقد الخاص بـ Eiffel [34] .
بعد ScalaJS، يمكن تحويل كود Kotlin إلى JavaScript ، مما يسمح بالتوافق بين الكود المكتوب باللغتين. يمكن استخدام هذا إما لكتابة تطبيقات ويب كاملة في Kotlin، أو لمشاركة الكود بين واجهة Kotlin الخلفية وواجهة JavaScript الأمامية. [35]
بناء الجملة
أسلوب البرمجة الإجرائية
تخفف Kotlin من قيود Java التي تسمح بوجود الأساليب والمتغيرات الثابتة داخل نص الفئة فقط. يمكن تعريف الكائنات والوظائف الثابتة في المستوى الأعلى من الحزمة دون الحاجة إلى مستوى فئة زائد. للتوافق مع Java، توفر Kotlin JvmNameتعليقًا يحدد اسم الفئة المستخدم عند عرض الحزمة من مشروع Java. على سبيل المثال، @file:JvmName("JavaClassName").
نقطة الدخول الرئيسية
كما هو الحال في C و C++ و C# وJava و Go ، فإن نقطة الدخول إلى برنامج Kotlin هي دالة تسمى "main"، والتي يمكن تمرير مصفوفة تحتوي على أي وسيطات سطر أوامر إليها . هذا اختياري منذ Kotlin 1.3. [36] يتم دعم استيفاء سلسلة على غرار Perl و PHP و Unix shell . كما يتم دعم استنتاج النوع .
// مرحبًا بالعالم! مثال
المرح الرئيسي () {
نطاق القيمة = "العالم"
println ( "مرحبا، $ scope !" )
}
المرح الرئيسي ( الحجج : Array <String> ) {
بالنسبة إلى ( arg في args )
println ( arg )
}
وظائف التمديد
على غرار C#، تسمح Kotlin بإضافة دالة توسعية إلى أي فئة دون الحاجة إلى إجراءات إنشاء فئة مشتقة بوظائف جديدة. تتمتع دالة التوسعة بالوصول إلى جميع الواجهات العامة للفئة، والتي يمكنها استخدامها لإنشاء واجهة وظيفة جديدة لفئة مستهدفة. ستظهر دالة التوسعة تمامًا مثل دالة الفئة وستظهر في فحص إكمال التعليمات البرمجية لوظائف الفئة. على سبيل المثال:
الحزمة MyStringExtensions
متعة سلسلة . lastChar (): Char = get ( length - 1 )
>>> println ( "Kotlin" . lastChar ())
من خلال وضع الكود السابق في المستوى الأعلى للحزمة، يتم توسيع فئة String لتشمل lastCharوظيفة لم يتم تضمينها في التعريف الأصلي لفئة String.
// تحميل عامل '+' باستخدام دالة تمديد
عامل المرح نقطة . زائد ( أخرى : نقطة ): نقطة {
نقطة العودة ( x + آخر . x ، y + آخر . y )
}
>>> قيمة p1 = النقطة ( 10 ، 20 )
>>> قيمة p2 = النقطة ( 30 ، 40 )
>>> println ( p1 + p2 )
النقطة ( x = 40 ، y = 60 )
وظائف النطاق
تحتوي لغة Kotlin على خمس وظائف نطاق، والتي تسمح بتغيير النطاق داخل سياق الكائن . وظائف النطاق هي let، run، with، apply، و also. [37]
فك حزم الحجج باستخدام عامل الانتشار
على غرار Python، يقوم عامل الانتشار asterisk (*) بفك محتويات المصفوفة كوسائط فردية لوظيفة، على سبيل المثال:
المرح الرئيسي ( الحجج : Array <String> ) {
قائمة val = listOf ( "args: " , * args )
println ( قائمة )
}
إعلانات التفكيك
تؤدي إعلانات التفكيك إلى تفكيك كائن إلى متغيرات متعددة في وقت واحد، على سبيل المثال، قد يتم تفكيك كائن إحداثيات ثنائي الأبعاد إلى عددين صحيحين، x و y .
على سبيل المثال، Map.Entryيدعم الكائن التفكيك لتبسيط الوصول إلى حقول المفتاح والقيمة الخاصة به:
لـ (( المفتاح ، القيمة ) في الخريطة )
println ( " $ key : $ value " )
الوظائف المتداخلة
تسمح Kotlin بإعلان الوظائف المحلية داخل وظائف أو طرق أخرى.
الفئة User ( val id : Int ، val name : String ، val address : String )
متعة حفظ المستخدم إلى قاعدة البيانات ( المستخدم : المستخدم ) {
متعة التحقق ( المستخدم : المستخدم ، القيمة : سلسلة ، اسم الحقل : سلسلة ) {
require ( value.isNotEmpty ()) { " لا يمكن حفظ المستخدم ${ user.id } : فارغ $ fieldName " }
}
التحقق من صحة ( المستخدم ، اسم المستخدم ، "الاسم" )
التحقق من صحة ( المستخدم ، عنوان المستخدم ، "العنوان " )
// حفظ المستخدم في قاعدة البيانات
...
}
الفصول الدراسية نهائية بشكل افتراضي
في Kotlin، لاستخلاص فئة جديدة من نوع فئة أساسية، يجب وضع علامة "مفتوحة" على الفئة الأساسية بشكل صريح. وهذا على النقيض من معظم لغات البرمجة الموجهة للكائنات مثل Java حيث تكون الفئات مفتوحة بشكل افتراضي.
مثال على فئة أساسية مفتوحة لاشتقاق فئة فرعية جديدة منها:
// مفتوح في الفصل يعني أن هذا الفصل سيسمح بالفئات المشتقة
افتح فئة MegaButton {
// no-open في الدالة يعني أن
// يتم تعطيل السلوك المتعدد الأشكال إذا تم تجاوز الوظيفة في الفئة المشتقة
تعطيل المرح () { ... }
// مفتوح على وظيفة يعني أن
// السلوك المتعدد الأشكال مسموح به إذا تم تجاوز الوظيفة في الفئة المشتقة
افتح المرح المتحرك () { ... }
}
الفئة GigaButton : MegaButton () {
// الاستخدام الصريح لكلمة المفتاح override مطلوب لتجاوز دالة في فئة مشتقة
تجاوز fun animate () { println ( "نقرة كبيرة!" ) }
}
الفصول المجردة مفتوحة بشكل افتراضي
تحدد الفئات المجردة وظائف مجردة أو "افتراضية بحتة" سيتم تعريفها في فئة مشتقة. الفئات المجردة مفتوحة بشكل افتراضي.
// ليست هناك حاجة لكلمة المفتاح open هنا، فهي مفتوحة افتراضيًا
فئة مجردة متحركة {
// هذه الوظيفة الافتراضية مفتوحة بالفعل بشكل افتراضي أيضًا
تجريدي مرح متحرك ()
توقف المرح المفتوح () { }
مرح animateTwice () { }
}
الفصول الدراسية عامة بشكل افتراضي
يوفر Kotlin الكلمات الأساسية التالية لتقييد الرؤية لإعلان المستوى الأعلى، مثل الفئات، وأعضاء الفئة: public، internal، protected، و private.
عند تطبيقه على عضو الفصل:
| الكلمة الرئيسية | الرؤية |
|---|---|
public(تقصير) |
في كل مكان |
internal |
داخل الوحدة |
protected |
ضمن الفئات الفرعية |
private |
ضمن الفصل |
عند تطبيقه على إعلان المستوى الأعلى:
| الكلمة الرئيسية | الرؤية |
|---|---|
public(تقصير) |
في كل مكان |
internal |
داخل الوحدة |
private |
داخل ملف |
مثال:
//الفئة مرئية فقط للوحدة الحالية
فئة مفتوحة داخلية TalkativeButton {
// الطريقة مرئية فقط للفئة الحالية
صرخة مرحة خاصة () = println ( "مرحبًا!" )
// الطريقة مرئية للفئة الحالية والفئات المشتقة
محمية متعة الهمس () = println ( "دعونا نتحدث!" )
}
الفئة الداخلية MyTalkativeButton : TalkativeButton () {
متعة مطلقة () = سوبر . همس ()
}
زر المحادثة الخاص بي ( ) .
المنشئ الأساسي مقابل المنشئ الثانوي
يدعم Kotlin تحديد "منشئ أساسي" كجزء من تعريف الفئة نفسها، ويتكون من قائمة وسيطات تتبع اسم الفئة. تدعم قائمة الوسيطات هذه بناء جملة موسعًا على قوائم وسيطات الوظائف القياسية في Kotlin والتي تمكن من إعلان خصائص الفئة في المنشئ الأساسي، بما في ذلك سمات الرؤية والقابلية للتوسع والقابلية للتغيير. بالإضافة إلى ذلك، عند تعريف فئة فرعية، يمكن تجاوز الخصائص في الواجهات الفائقة والفئات الفائقة في المنشئ الأساسي.
// مثال على فئة تستخدم بناء الجملة الأساسي للمنشئ
// (مطلوب منشئ واحد فقط لهذه الفئة)
افتح الفئة BaseUser ( افتح var isSubscribed : Boolean )
افتح فئة PowerUser ( الاسم المستعار المحمي : سلسلة ، التجاوز النهائي لـ var isSubscribed : Boolean = true ): BaseUser ( isSubscribed ) { }
ومع ذلك، في الحالات التي تكون فيها هناك حاجة لأكثر من منشئ لفئة، يمكن تعريف منشئ أكثر عمومية باستخدام صيغة المنشئ الثانوي ، والتي تشبه إلى حد كبير صيغة المنشئ المستخدمة في معظم لغات البرمجة الموجهة للكائنات مثل C++ وC# وJava.
// مثال على فئة تستخدم صيغة المنشئ الثانوي
// (مطلوب أكثر من منشئ لهذه الفئة)
سياق الصف
فئة AttributeSet
افتح فئة View ( ctx : Context ) {
المنشئ ( ctx : السياق ، attr : مجموعة السمات ): هذا ( ctx )
}
الفئة MyButton : عرض {
// المنشئ رقم 1
المنشئ ( ctx : السياق ) : super ( ctx ) {
}
// المنشئ رقم 2
المنشئ ( ctx : السياق ، attr : مجموعة السمات ) : super ( ctx ، attr ) {
// ...
}
}
الفصول المختومة
تقيد الفئات والواجهات المختومة التسلسل الهرمي للفئات الفرعية، مما يعني المزيد من التحكم في التسلسل الهرمي للميراث.
إعلان الواجهة والفئة المختومة:
واجهة مغلقة Expr
وظيفة فئة مختومة
يتم تعريف جميع الفئات الفرعية للفئة المختومة في وقت التجميع. لا يمكن إضافة فئات فرعية جديدة إليها بعد تجميع الوحدة النمطية التي تحتوي على الفئة المختومة. على سبيل المثال، لا يمكن إنشاء فئات فرعية لفئة مختومة في ملف jar مُجمَّع.
مركبة من فئة مختومة
فئة البيانات Car ( val brandName : String ، val owner : String ، val color : String ): Vehicle ()
فئة الدراجة ( اسم العلامة التجارية : String ، مالك الدراجة : String ، لون الدراجة : String ): مركبة ( )
فئة الجرار ( val brandName : String ، val owner : String ، val color : String ): Vehicle ()
فال كيا كار = سيارة ( "كيا" ، "جون" ، "أزرق" )
val hyundaiCar = سيارة ( "Hyundai" ، "Britto" ، "Green" )
فئات البيانات
يحدد بناء Kotlin الفئات التي يكون الغرض الأساسي منها تخزين البيانات، على data classغرار أنواع Java record. مثل أنواع Java record، فإن البناء مشابه للفئات العادية باستثناء أن الطرق الرئيسية equalsو يتم إنشاؤها تلقائيًا من خصائص الفئة. على عكس سجلات Java، فإن فئات البيانات مفتوحة للتوريث.
hashCodetoString
غلاف تفاعلي Kotlin
$ kotlinc-jvm
type :help للمساعدة؛ :quit للخروج
>>> 2 + 2
4
>>> println ( "مرحبا بالعالم!" )
مرحبا بالعالم!
Kotlin كلغة برمجة نصية
يمكن أيضًا استخدام Kotlin كلغة برمجة نصية . البرنامج النصي هو ملف مصدر Kotlin يستخدم امتداد اسم الملف .kts ، مع كود مصدر قابل للتنفيذ في نطاق المستوى الأعلى:
// قائمة المجلدات.kts
استيراد ملف java.io
val folders = File ( args [ 0 ] ). listFiles { file - > file.isDirectory ( ) }
المجلدات ؟. forEach ( :: println )
يمكن تشغيل البرامج النصية عن طريق تمرير -scriptالخيار وملف البرنامج النصي المقابل إلى المترجم.
$ kotlinc -script list_folders.kts "مسار المجلد المراد فحصه"
سلامة الصفر
يميز Kotlin بين أنواع البيانات القابلة للعدم وغير القابلة للعدم. يجب إعلان جميع الكائنات القابلة للعدم بعلامة "؟" بعد اسم النوع. تتطلب العمليات على الكائنات القابلة للعدم عناية خاصة من المطورين: يجب إجراء فحص للعدم قبل استخدام القيمة، إما صراحةً أو بمساعدة مشغلات Kotlin الآمنة للعدم:
- يمكن استخدام ( عامل التنقل الآمن ) للوصول بأمان إلى طريقة أو خاصية لكائن قد يكون فارغًا. إذا كان الكائن فارغًا، فلن يتم استدعاء الطريقة ويتم تقييم التعبير إلى فارغ. مثال:
//يرجع null إذا ... // - foo() ترجع قيمة null، // - أو إذا كانت foo() غير فارغة، لكن bar() أرجعت قيمة فارغة، // - أو إذا كانت foo() و bar() غير فارغة، ولكن baz() أرجعت قيمة null. // العكس صحيح، قيمة الإرجاع ليست فارغة إذا وفقط إذا كانت foo() وbar() وbaz() غير فارغة foo () ? .bar () ? .baz ()
- ؟: ( عامل الاندماج الصفري ) هو عامل ثنائي يعيد المتغير الأول، إذا لم يكن صفرًا، وإلا يعيد المتغير الثاني. غالبًا ما يُشار إليه باسم عامل Elvis ، نظرًا لتشابهه مع تمثيل تعبيري لـ Elvis Presley.
مرح قل مرحباً ( ربما : سلسلة؟، لا شيء مطلقًا : عدد صحيح ) { // استخدام عامل Elvis val name : String = perhaps ?: "غريب" println ( "مرحبا $ name " ) }
لامدا
توفر Kotlin الدعم للوظائف ذات الترتيب الأعلى والوظائف المجهولة أو lambdas . [38]
// تأخذ الدالة التالية lambda، f، وتنفذ f وتمرر لها السلسلة "lambda"
// لاحظ أن (String) -> Unit يشير إلى lambda مع معلمة String ونوع الإرجاع Unit
متعة executeLambda ( f : ( String ) -> Unit ) {
ف ( "لامدا" )
}
يتم إعلان Lambda باستخدام الأقواس، { } . إذا أخذت lambda معلمات، يتم إعلانها داخل الأقواس ويتبعها عامل -> .
// يحدد البيان التالي lambda يأخذ معلمة واحدة ويمررها إلى دالة println
val l = { c : أي؟ -> println ( c ) }
// يمكن تعريف lambdas بدون معلمات ببساطة باستخدام { }
val l2 = { print ( "لا يوجد معلمات" ) }
مثال على "مرحبا بالعالم"
(مأخوذ من https://kotlinlang.org/docs/kotlin-tour-hello-world.html وموضح على هذا الرابط.)
المرح الرئيسي () {
println ( "مرحبا بالعالم!" )
// مرحبا بالعالم!
}
أدوات
- يتمتع Android Studio (المستند إلى IntelliJ IDEA) بدعم رسمي لـ Kotlin، بدءًا من Android Studio 3. [39]
- يتم دعم التكامل مع أدوات بناء Java الشائعة، بما في ذلك Apache Maven ، [40] و Apache Ant ، [41] و Gradle . [42]
- يحتوي Emacs على وضع Kotlin في مستودع حزم MELPA الخاص به.
- توفر JetBrains أيضًا مكونًا إضافيًا لـ Eclipse . [43] [44]
- يحتوي IntelliJ IDEA على دعم إضافي لـ Kotlin. [45] كان IntelliJ IDEA 15 هو الإصدار الأول الذي يجمع بين مكون Kotlin الإضافي في IntelliJ Installer، ويوفر دعم Kotlin جاهزًا للاستخدام. [46]
- Gradle : يتمتع Kotlin بتكامل سلس مع Gradle، وهي أداة أتمتة البناء الشهيرة. يتيح لك Gradle بناء دورة حياة مشاريع Kotlin وأتمتتها وإدارتها بكفاءة [47]
التطبيقات
عندما تم الإعلان عن Kotlin كلغة تطوير رسمية لنظام Android في Google I/O في مايو 2017، أصبحت اللغة الثالثة المدعومة بالكامل لنظام Android، بعد Java وC++. [48] اعتبارًا من عام 2020 [تحديث]، تعد Kotlin اللغة الأكثر استخدامًا على نظام Android، حيث تقدر Google أن 70٪ من أفضل 1000 تطبيق على متجر Play مكتوبة بلغة Kotlin. تمتلك Google نفسها 60 تطبيقًا مكتوبًا بلغة Kotlin، بما في ذلك الخرائط وDrive. العديد من تطبيقات Android، مثل Google Home، في طور الانتقال إلى Kotlin، وبالتالي تستخدم كل من Kotlin وJava. يُنظر إلى Kotlin على نظام Android على أنه مفيد لسلامته من المؤشر الفارغ ، بالإضافة إلى ميزاته التي تجعل الكود أقصر وأكثر قابلية للقراءة. [49]
بالإضافة إلى استخدامه البارز على أندرويد، يكتسب Kotlin زخمًا في تطوير جانب الخادم. أضاف إطار عمل Spring رسميًا دعم Kotlin مع الإصدار 5، في 4 يناير 2017. [50] لمزيد من دعم Kotlin، ترجم Spring جميع وثائقه إلى Kotlin، وأضاف دعمًا مدمجًا للعديد من الميزات الخاصة بـ Kotlin مثل الروتينات الفرعية. [51] بالإضافة إلى Spring، أنتجت JetBrains إطار عمل Kotlin أولاً يسمى Ktor لبناء تطبيقات الويب. [52]
في عام 2020، وجدت JetBrains في دراسة استقصائية للمطورين الذين يستخدمون Kotlin أن 56% كانوا يستخدمون Kotlin لتطبيقات الهاتف المحمول، بينما كان 47% يستخدمونها لواجهة الويب الخلفية. قال أكثر من ثلث مطوري Kotlin أنهم كانوا ينتقلون إلى Kotlin من لغة أخرى. كان معظم مستخدمي Kotlin يستهدفون Android (أو غير ذلك على JVM)، مع استخدام 6% فقط لـ Kotlin Native. [53]
التبني
في عام 2018، كانت Kotlin أسرع لغة نموًا على GitHub، مع وجود عدد أكبر من المطورين بمقدار 2.6 مرة مقارنة بعام 2017. [54] وهي رابع أكثر لغة برمجة محبوبة وفقًا لاستطلاع Stack Overflow Developer لعام 2020. [55]
حصلت Kotlin أيضًا على جائزة O'Reilly Open Source Software Conference Breakout Award لعام 2019. [56]
لقد استخدمت العديد من الشركات/المنظمات Kotlin لتطوير الواجهة الخلفية:
- أليجرو [57]
- أمازون [58]
- أطلسيان [59]
- تطبيق كاش [60] [61]
- تدفق [62]
- جوجل [63]
- جرادل [64]
- جيت برينز [65]
- شبكة السحابة [66]
- إدارة الضرائب النرويجية [67]
- أوليكس [68]
- محوري [69]
- السفر الصاروخي [70]
- شازام [71]
- زالاندو [72]
لقد استخدمت بعض الشركات/المنظمات Kotlin لتطوير الويب:
- بنك باركليز [73]
- داتا2فيز [74]
- فريتز2 [75]
- جيت برينز [76]
صرحت العديد من الشركات علنًا أنها تستخدم Kotlin:
- المعسكر الأساسي [77]
- Corda، وهو دفتر موزع تم تطويره بواسطة اتحاد من البنوك المعروفة (مثل Goldman Sachs و Wells Fargo و JP Morgan و Deutsche Bank و UBS و HSBC و BNP Paribas و Société Générale )، يحتوي على أكثر من 90٪ من كود Kotlin في قاعدة الكود الخاصة به.
- كورسيرا [78]
- دريب ستات [79]
- دولينجو [80]
- نيتفليكس [81]
- بينتريست [82]
- تريلو [83]
- أوبر [84]
انظر أيضا
مراجع
- تحتوي هذه المقالة على اقتباسات من دروس Kotlin التي تم إصدارها بموجب ترخيص Apache 2.0.
- ^ "إصدار Kotlin 2.0.20 (المستودع)".
- ^ "ما هو النطق الإنجليزي الصحيح لـ Kotlin؟". 16 أكتوبر 2019. مؤرشف من الأصل في 9 نوفمبر 2019 . استرجاع 9 نوفمبر 2019 .
- ^ "Kotlin for JavaScript - Kotlin Programming Language". Kotlin . مؤرشف من الأصل في 16 أغسطس 2020 . تم الاسترجاع 20 أغسطس 2020 .
- ^ "Kotlin لتطوير الأجهزة المحمولة عبر الأنظمة الأساسية". JetBrains: أدوات المطورين للمحترفين والفرق . مؤرشف من الأصل في 19 أغسطس 2020. تم الاسترجاع في 20 أغسطس 2020 .
- ^ "Kotlin Foundation - Kotlin Programming Language". Kotlin . مؤرشف من الأصل في 29 ديسمبر 2019 . تم الاسترجاع 16 ديسمبر 2019 .
- ^ بواسطة Lardinois, Frederic (7 مايو 2019). "Kotlin هي الآن لغة Google المفضلة لتطوير تطبيقات Android". TechCrunch . مؤرشف من الأصل في 7 مايو 2019. تم الاسترجاع في 8 مايو 2019 .
- ^ "Kotlin FAQ". مؤرشف من الأصل في 2 يونيو 2021 . تم الاسترجاع في 20 أغسطس 2024 .
يتيح لك Kotlin اختيار إصدار JVM للتنفيذ. بشكل افتراضي، ينتج مُجمِّع Kotlin/JVM بايت كود متوافق مع Java 8. إذا كنت تريد الاستفادة من التحسينات المتاحة في الإصدارات الأحدث من Java، فيمكنك تحديد إصدار Java المستهدف صراحةً من 9 إلى 21. لاحظ أنه في هذه الحالة قد لا يعمل البايت كود الناتج على الإصدارات الأقدم.
- ^ "استقرار مكونات Kotlin". Kotlin . 21 مايو 2021. مؤرشف من الأصل في 29 يوليو 2021 . تم الاسترجاع 29 يوليو 2021 .
- ^ "Kotlin 1.5.0 – أول إصدار كبير لعام 2021". Kotlin . 4 مايو 2021. مؤرشف من الأصل في 12 أغسطس 2021 . تم الاسترجاع 29 يوليو 2021 .
- ^ موبيوس (8 يناير 2015)، أندريه بريسلاف – Kotlin لنظام Android: Коротко и ясно، أرشفة من النسخة الأصلية في 12 أبريل 2023 ، استرجاعها 28 مايو 2017
- ^ ab Krill, Paul (22 July 2011). "JetBrains readyies JVM language Kotlin". InfoWorld . مؤرشف من الأصل في 7 سبتمبر 2019 . تم الاسترجاع في 2 فبراير 2014 .
- ^ ووترز، جون (22 فبراير 2012). "Kotlin Goes Open Source". ADTmag.com . 1105 Enterprise Computing Group. مؤرشف من الأصل في 18 فبراير 2014 . تم الاسترجاع 2 فبراير 2014 .
- ^ "لماذا تحتاج JetBrains إلى Kotlin". 2 أغسطس 2011. مؤرشف من الأصل في 16 أغسطس 2023. تم الاسترجاع 11 فبراير 2018. نتوقع أن
يعمل Kotlin على زيادة مبيعات IntelliJ IDEA
- ^ "test · JetBrains/kotlin@3e4dce3". GitHub . مؤرشف من الأصل في 17 أكتوبر 2022 . تم الاسترجاع 17 أكتوبر 2022 .
- ^ "تم إصدار Kotlin 1.0: لغة Pragmatic لـ JVM وAndroid | Kotlin Blog". Blog.jetbrains.com . 15 فبراير 2016. مؤرشف من الأصل في 24 يناير 2018 . تم الاسترجاع 11 أبريل 2017 .
- ^ شافيروف، ماكسيم (17 مايو 2017). "Kotlin على Android. رسميًا الآن". مؤرشف من الأصل في 29 مايو 2023 . تم الاسترجاع 18 مايو 2017 .
اليوم، في الكلمة الرئيسية لمؤتمر Google I/O، أعلن فريق Android عن دعم من الدرجة الأولى لـ Kotlin.
- ^ "تم إصدار Kotlin 1.2: مشاركة الكود بين المنصات | مدونة Kotlin". blog.jetbrains.com . 28 نوفمبر 2017. مؤرشف من الأصل في 24 مايو 2023 . تم الاسترجاع 29 نوفمبر 2017 .
- ^ "مشاريع متعددة المنصات - لغة برمجة Kotlin". Kotlin . مؤرشف من الأصل في 18 أغسطس 2020 . تم الاسترجاع 20 أغسطس 2020 .
يعد العمل على جميع المنصات هدفًا صريحًا لـ Kotlin، لكننا نراه بمثابة مقدمة لهدف أكثر أهمية: مشاركة التعليمات البرمجية بين المنصات. مع دعم JVM وAndroid وJavaScript وiOS وLinux وWindows وMac وحتى الأنظمة المضمنة مثل STM32، يمكن لـ Kotlin التعامل مع أي وجميع مكونات التطبيق الحديث.
- ^ "Kotlin/kotlin-full-stack-application-demo". Kotlin. 3 أبريل 2020. مؤرشف من الأصل في 14 سبتمبر 2020 . تم الاسترجاع 4 أبريل 2020 .
- ^ "عرض توضيحي لتطبيق Kotlin full stack: تحديث جميع الإصدارات المعنية للعمل مع إصدار 1.3.70". youtrack.jetbrains.com . مؤرشف من الأصل في 2 أغسطس 2020 . تم الاسترجاع في 4 أبريل 2020 .
- ^ "تم إصدار Kotlin 1.1 مع دعم JavaScript ووظائف فرعية والمزيد". مؤرشف من الأصل في 4 يونيو 2023 . تم الاسترجاع 1 مايو 2017 .
- ^ "ما الجديد في Kotlin 1.4 - لغة برمجة Kotlin". Kotlin . مؤرشف من الأصل في 8 يونيو 2023 . تم الاسترجاع 20 أغسطس 2020 .
في 1.4.0، قمنا بتغيير واجهة برمجة التطبيقات Swift التي تم إنشاؤها من Kotlin بشكل طفيف فيما يتعلق بالطريقة التي يتم بها ترجمة الاستثناءات.
- ^ "ما الجديد في Kotlin 1.7.0 | Kotlin". مساعدة Kotlin . مؤرشف من الأصل في 20 يونيو 2022 . تم الاسترجاع 20 يونيو 2022 .
- ^ Krill, Paul (12 January 2023). "Kotlin 1.8.0 added recursive copy, delete for directoryies". مؤرشف من الأصل في 8 يوليو 2023 . تم الاسترجاع 8 مارس 2022 .
- ^ هاغارتي، سارة (6 يوليو 2023). "إصدار Kotlin 1.9.0". مؤرشف من الأصل في 28 يوليو 2023 . تم الاسترجاع 6 يوليو 2023 .
- ^ JetBrains (21 مايو 2024). "Kotlin 2.0.0". GitHub . مؤرشف من الأصل في 21 مايو 2024 . تم الاسترجاع 21 مايو 2024 .
- ^ "تقرير لغات JVM الموسعة مقابلة مع مبتكر Kotlin أندريه بريسلاف". Zeroturnaround.com . 22 أبريل 2013. مؤرشف من الأصل في 15 يناير 2019 . تم الاسترجاع 2 فبراير 2014 .
- ^ "الفاصلة المنقوطة". jetbrains.com . مؤرشف من الأصل في 23 ديسمبر 2015. تم الاسترجاع 8 فبراير 2014 .
- ^ "الأنواع تتحرك نحو اليمين". Medium . 16 يوليو 2020. مؤرشف من الأصل في 22 مايو 2023. استرجاع 6 نوفمبر 2021 .
- ^ "رومان إليزاروف هو مدير المشروع الجديد لـ Kotlin". مدونة Kotlin . JetBrains. 19 نوفمبر 2020. مؤرشف من الأصل في 20 يناير 2022. تم الاسترجاع 7 نوفمبر 2021 .
- ^ "القواعد النحوية الأساسية". Kotlin . Jetbrains. مؤرشف من الأصل في 29 يناير 2021 . تم الاسترجاع 19 يناير 2018 .
- ^ "functions". jetbrains.com . مؤرشف من الأصل في 23 نوفمبر 2015 . تم الاسترجاع 8 فبراير 2014 .
- ^ "ما الجديد في Kotlin 1.3 - لغة برمجة Kotlin". Kotlin . مؤرشف من الأصل في 22 أغسطس 2023 . تم الاسترجاع 4 أبريل 2020 .
- ^ "اعتبارات تصميم التصميم حسب العقد (DbC)". مناقشات Kotlin . 16 أغسطس 2012. مؤرشف من الأصل في 5 أبريل 2023. تم الاسترجاع في 4 أبريل 2020.
تنفيذ الدلالات الكاملة لـ Eiffel DbC وتحسينها.
- ^ "Kotlin for JavaScript | Kotlin". Kotlin Help . 21 يناير 2021. مؤرشف من الأصل في 14 يوليو 2023 . تم الاسترجاع 19 مارس 2021 .
- ^ "أمثلة Kotlin: تعلم برمجة Kotlin من خلال الأمثلة". مؤرشف من الأصل في 18 نوفمبر 2021 . تم الاسترجاع 13 أبريل 2019 .
- ^ "وظائف النطاق | Kotlin". تعليمات Kotlin . تم الاسترجاع في 10 أغسطس 2024 .
- ^ "الدوال ذات الترتيب الأعلى و Lambdas". Kotlin . Jetbrains. مؤرشف من الأصل في 22 يناير 2021 . تم الاسترجاع 19 يناير 2018 .
- ^ "Kotlin and Android". مطورو Android . مؤرشف من الأصل في 4 أكتوبر 2023 . تم الاسترجاع 19 يونيو 2017 .
- ^ "استخدام Maven – لغة برمجة Kotlin". kotlinlang.org . مؤرشف من الأصل في 3 نوفمبر 2016 . تم الاسترجاع 9 مايو 2017 .
- ^ "استخدام Ant – لغة برمجة Kotlin". kotlinlang.org . مؤرشف من الأصل في 3 نوفمبر 2016 . تم الاسترجاع 9 مايو 2017 .
- ^ "استخدام Gradle – لغة برمجة Kotlin". kotlinlang.org . مؤرشف من الأصل في 9 نوفمبر 2016 . تم الاسترجاع في 9 مايو 2017 .
- ^ "البدء باستخدام Eclipse Neon – لغة برمجة Kotlin". Kotlinlang.org . 10 نوفمبر 2016. مؤرشف من الأصل في 18 مايو 2023 . تم الاسترجاع 11 أبريل 2017 .
- ^ "JetBrains/kotlin-eclipse: Kotlin Plugin for Eclipse". GitHub. مؤرشف من الأصل في 16 فبراير 2016. تم الاسترجاع في 11 أبريل 2017 .
- ^ "Kotlin :: JetBrains Plugin Repository". Plugins.jetbrains.com . 31 مارس 2017. مؤرشف من الأصل في 25 يونيو 2023 . تم الاسترجاع 11 أبريل 2017 .
- ^ "ما الجديد في IntelliJ IDEA 2017.1". Jetbrains.com . مؤرشف من الأصل في 3 أكتوبر 2023 . تم الاسترجاع 11 أبريل 2017 .
- ^ "Gradle". Kotlin Help . مؤرشف من الأصل في 8 أبريل 2024 . تم الاسترجاع 8 أبريل 2024 .
- ^ Lardinois, Frederic (17 May 2017). "Google makes Kotlin a first-class language for writing Android apps". techcrunch.com . مؤرشف من الأصل في 22 مايو 2017 . تم الاسترجاع 28 يونيو 2018 .
- ^ "لغة برمجة Kotlin: كيف تستخدمها Google لتصحيح أخطاء التعليمات البرمجية التي تسبب معظم الأعطال". ZDNet . مؤرشف من الأصل في 6 أبريل 2023 . تم الاسترجاع 6 ديسمبر 2020 .
- ^ "تقديم دعم Kotlin في Spring Framework 5.0". Spring . Pivotal. 4 يناير 2017. مؤرشف من الأصل في 23 أغسطس 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "حالة دعم Kotlin في Spring". JetBrains . 14 أغسطس 2020. مؤرشف من الأصل في 7 يونيو 2023 . تم الاسترجاع 6 ديسمبر 2020 .
- ^ "مراجعة أطر عمل الخدمات المصغرة: نظرة على بدائل Spring Boot". DZone . مؤرشف من الأصل في 21 مايو 2023 . تم الاسترجاع 6 ديسمبر 2020 .
- ^ "برمجة Kotlin - حالة نظام المطورين البيئي لعام 2020". JetBrains . مؤرشف من الأصل في 5 أبريل 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "حالة الكون الثامن". مؤرشف من الأصل في 22 مارس 2019 . تم الاسترجاع 24 يوليو 2019 .
- ^ "استطلاع رأي مطوري Stack Overflow لعام 2020". مؤرشف من الأصل في 4 يونيو 2020. استرجاع 28 مايو 2020 .
- ^ "Kotlin يفوز بجائزة Breakout Project of the Year في OSCON '19". 18 يوليو 2019. مؤرشف من الأصل في 17 مايو 2022 . تم الاسترجاع 24 يوليو 2019 .
- ^ "Kotlin at Allegro". Talking Kotlin . أكتوبر 2018. مؤرشف من الأصل في 1 يونيو 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "QLDB at Amazon". Talking Kotlin . 30 يونيو 2020. مؤرشف من الأصل في 1 يونيو 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "مستقبل برمجيات Jira المدعومة بلغة Kotlin". يوتيوب . 29 أكتوبر 2019. مؤرشف من الأصل في 1 سبتمبر 2023. استرجاع 1 سبتمبر 2023 .
- ^ "Going Full Kotlin Multiplatform". Talking Kotlin . 14 أبريل 2020. مؤرشف من الأصل في 5 أبريل 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "square/sqldelight". GitHub . مؤرشف من الأصل في 20 يونيو 2019 . تم الاسترجاع 24 يوليو 2019 .
- ^ "استخدام Kotlin لتطوير الواجهة الخلفية في Flux". Talking Kotlin . 14 أغسطس 2019. مؤرشف من الأصل في 1 يونيو 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "حالة Kotlin على Android". YouTube . 10 يونيو 2020. مؤرشف من الأصل في 15 يناير 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "Gradle Kotlin DSL Primer". docs.gradle.org . مؤرشف من الأصل في 18 أغسطس 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "Kotless". Talking Kotlin . 30 يناير 2020. مؤرشف من الأصل في 5 أبريل 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "Kotlin on the backend at Meshcloud". Talking Kotlin . 28 فبراير 2018. مؤرشف من الأصل في 6 أبريل 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "KotlinConf 2019: Kotlin Runs Taxes in Norway by Jarle Hansen & Anders Mikkelsen". YouTube . 16 ديسمبر 2019. مؤرشف من الأصل في 10 أبريل 2023. تم الاسترجاع 29 سبتمبر 2020 .
- ^ "Greenfield Kotlin atOLX". Talking Kotlin . 24 أغسطس 2018. مؤرشف من الأصل في 1 يونيو 2023. تم الاسترجاع 29 سبتمبر 2020 .
- ^ "مراقبة التطبيقات باستخدام الميكرومتر". Talking Kotlin . 14 يونيو 2018. مؤرشف من الأصل في 1 أبريل 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "Groovy and Kotlin Interop at Rocket Travel". Talking Kotlin . 14 مايو 2018. مؤرشف من الأصل في 5 أبريل 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "Kotlin at Shazam". Talking Kotlin . 29 يوليو 2018. مؤرشف من الأصل في 1 أبريل 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "Zally - An API Linter". Talking Kotlin . 29 يناير 2018. مؤرشف من الأصل في 6 أبريل 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "Java/Kotlin Developer - Barclays - Prague - Wizbii". Wizbii.com . تم الاسترجاع في 29 سبتمبر 2020 .
- ^ "KotlinConf 2017 - Frontend Kotlin from the Trenches by Gaetan Zoritchak". YouTube . 30 نوفمبر 2017. مؤرشف من الأصل في 10 أبريل 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "Fritz2". Talking Kotlin . 14 سبتمبر 2020. مؤرشف من الأصل في 6 أبريل 2023 . تم الاسترجاع 29 سبتمبر 2020 .
- ^ "KotlinConf 2019: Kotlin in Space by Maxim Mazin". يوتيوب . 18 ديسمبر 2019. مؤرشف من الأصل في 9 أبريل 2023. تم الاسترجاع 29 سبتمبر 2020 .
- ^ "كيف جعلنا تطبيق Basecamp 3's Android متوافقًا بنسبة 100% مع لغة Kotlin – Signal v. Noise". Signal v. Noise . 29 أبريل 2017. مؤرشف من الأصل في 1 أغسطس 2018 . تم الاسترجاع 1 مايو 2017 .
- ^ "التحول إلى ثنائي اللغة في كورسيرا". 26 أبريل 2018. مؤرشف من الأصل في 15 يناير 2023. اطلع عليه بتاريخ 24 يوليو 2019 .
- ^ "Kotlin in Production – What works, Whats broken". Blog.dripstat.com . 24 سبتمبر 2016. مؤرشف من الأصل في 1 يوليو 2019 . تم الاسترجاع 11 أبريل 2017 .
- ^ "Duolingo على تويتر". مؤرشف من الأصل في 16 مارس 2023 . استرجاع 13 أبريل 2020 .
- ^ "روب سبيلدينر على تويتر". مؤرشف من الأصل في 25 ديسمبر 2022 . تم الاسترجاع 24 يوليو 2019 .
- ^ "Droidcon NYC 2016 - Kotlin in Production". YouTube . 3 نوفمبر 2016. مؤرشف من الأصل في 14 أبريل 2023. تم الاسترجاع 24 يوليو 2019 .
- ^ "دان لو على تويتر". مؤرشف من الأصل في 2 مايو 2023. اطلع عليه بتاريخ 24 يوليو 2019 .
- ^ "قياس أداء Kotlin Build في Uber". 30 أبريل 2019. مؤرشف من الأصل في 5 يونيو 2023. تم الاسترجاع 6 مارس 2024 .
روابط خارجية
- الموقع الرسمي
