كوتلين (لغة برمجة)

(تم التحويل من Kotlin (programming language))
كوتلين
Kotlin logo 2021.svg
ParadigmMulti-paradigm: object-oriented, functional, imperative, block structured, declarative, generic, reflective, concurrent
Designed byJetBrains
DeveloperJetBrains
First appearedيوليو 22, 2011; منذ 13 سنة (2011-07-22
الإصدار المستقر
1.5.10 / مايو 24, 2021; منذ 3 سنين (2021-05-24[1]
الإطلاق الپروڤة
1.5.0-RC / أبريل 15, 2021; منذ 3 سنين (2021-04-15[2][3][4][5]
Typing disciplineInferred, static, strong
Platform
OSCross-platform
LicenseApache License 2.0
Filename extensions.kt, .kts, .ktm
Websitekotlinlang.org Edit this at Wikidata
Influenced by

كوتلينKotlin ( /ˈkɒtlɪn/)[6] وهي لغة برمجة متعددة المنصات، مكتوبة بشكل ثابت، للأغراض العامة مع استدلال الكتابة. تم تصميم كوتلين للتعامل بشكل كامل مع جاڤا، ويعتمد إصدار JVM من مكتبة كوتلين المعيارية على مكتبة فئة جاڤا،[7] لكن استدلال الكتابة يسمح بناء الجملة بأن يكون أكثر إيجازاً. تستهدف كوتلين بشكل أساسي JVM، ولكنها تجمع أيضاً إلى جاڤاسكريپت (على سبيل المثال، لتطبيقات الوب الأمامية باستخدام رياكت[8])أو الكود الأصلي (عبر LLVM)؛ على سبيل المثال، للتطبيقات الأصلية آي أو إس التي تشارك منطق العمل مع تطبيقات أندرويد.[9]تتحمل جت براينز تكاليف تطوير اللغة، بينما تحفظ مؤسسة كوتلين بعلامة كوتلين التجارية.[10]

في 7 مايو 2019، أعلنت گوگل أن لغة برمجة كوتلين هي الآن لغتها المفضلة لمطوري تطبيقات أندرويد.[11] منذ إصدار أندرويد استوديو 3.0 في أكتوبر 2017، تم تضمين كوتلين كبديل لمترجم\محول جاڤا القياسي. ينتج مترجم\محول أندرويد كوتلين جاڤا 8 بايت كود افتراضياً (والذي يتم تشغيله في أي JVM لاحق)، ولكنه يتيح للمبرمج اختيار استهداف جاڤا 8 حتى 16، من أجل التحسين،[12] أو السماح بمزيد من الميزات، على سبيل المثال جاڤا 8 المرتبط بـ كوتلين 1.4،[13]ويمتلك دعم تجريبي لفئة السجل لتوافق جاڤا 16.[14]

يعتبر دعم كوتلين لجاڤا سكريپت (أي الخلفية الكلاسيكية) مستقراً في كوتلين 1.3 من قبل مطوريه، بينما يعتبر كوتلين/JS (القائم على IR) في الإصدار 1.4، ألفا. يعتبر كوتلين / زمن التشغيل الأصلي (على سبيل المثال دعم أپل) تجريبياً.[15]

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

تاريخ

في يوليو 2011، كشفت جت براينز النقاب عن مشروع كوتلين، لغة جديدة لـ JVM، والتي كانت قيد التطوير لمدة عام.[16]وقد صرح ديمتري جيميروڤ، رئيس جت براينز، إن معظم اللغات لا تحتوي على الميزات التي كانوا يبحثون عنها، باستثناء سكالا. ومع ذلك، فقد نوه بزمن التصريف البطيء لسكالا على أنه خلل.[16] أحد الأهداف المعلنة لـ كوتلين هو التجميع بسرعة مثل جاڤا. في فبراير 2012، افتتحت جت براينز المشروع بموجب رخصة أپاتشى 2.[17]

يأتي الاسم من جزيرة كوتلين، بالقرب من سانت پطرسبورگ. فقد ذكر أندري بريسلاڤ أن الفريق قرر تسميتها على اسم جزيرة، تماماً مثل تسمية جاڤا على اسم جزيرة جاوة الإندونيسية[18] (على الرغم من أن لغة البرمجة جاڤا ربما سميت باسم القهوة).[19]

تأمل جت براينز أن تؤدي اللغة الجديدة إلى زيادة مبيعات IntelliJ IDEA.[20]

تم إصدار كوتلين v1.0 في 15 فبراير 2016.[21]يعتبر هذا أول إصدار مستقر رسمياً وقد التزمت جت براينز بالتوافق طويل المدى مع الإصدارات السابقة بدءاً من هذا الإصدار.

في گوگل آي/أو 2017، أعلنت گوگل عن دعم من الدرجة الأولى لـ كوتلين على أندرويد.[22]

تم إصدار كوتلين v1.2 في 28 نوفمبر 2017.[23] تمت إضافة رمز المشاركة بين JVM و جاڤاسكريپت الأساسيين إلى هذا الإصدار (اعتباراً من الإصدار 1.4، تعد البرمجة متعددة المنصات إحدى ميزات ألفا[24] وقد تمت ترقيتها من "تجريبية"). وقد تم عمل عرض توضيحي بكامل المكدس باستخدام البرنامج المساعد الجديد كوتلين / جيه إس گرادل.[25][26]

تم إصدار كوتلين v1.3 في 29 أكتوبر 2018، مما أدى إلى إحضار روتين مشترك للبرمجة غير المتزامنة.

في 7 مايو 2019، أعلنت گوگل أن لغة برمجة كوتلين هي الآن لغتها المفضلة لمطوري تطبيقات أندرويد.[11]

تم إصدار كوتلين v1.4 في أغسطس 2020، على سبيل المثال بعض التغييرات الطفيفة على دعم منصات أپل، على سبيل المثال إلى توافق Objective-C / سويفت.[27]

وقد تم إصدار كوتلين v1.5 في مايو 2021.


التصميم

صرح قائد التطوير أندريه بريسلاڤ إن لغة كوتلين مصممة لتكون لغة ذات قوة صناعية كائنية التوجه، و "لغة أفضل" من جاڤا، ولكن لا يزال قابلاً للتشغيل المتبادل تماماً مع كود جاڤا، مما يسمح للشركات بإجراء ترحيل تدريجي من جاڤا إلى كوتلين.[28]

الفاصلة المنقوطة اختيارية باعتبارها منهي تصريح؛ في معظم الحالات، يكون سطر جديد كافياً لـ التصريف لاستنتاج أن العبارة قد انتهت.[29]

تصريحات كوتلين المتغيرة و قوائم الپارامترات لها نوع البيانات الذي تأتي بعد اسم المتغير (ومع فاصل نقطتان رأسيتان)، على غرار بيسيك، پاسكال و تايپ سكريپت.

يمكن أن تكون المتغيرات في كوتلين للقراءة فقط، ويتم الإعلان عنها باستخدام الكلمة الرئيسية val، أو قابلة للتغيير، ويتم التصريح عنها باستخدام الكلمة الأساسية var.[30]

تكون عناصر الفئة عامةً بشكل افتراضي، والفئات نفسها نهائية بشكل افتراضي، مما يعني أنه يتم تعطيل إنشاء فئة مشتقة ما لم يتم التصريح عن الفئة الأساسية بالكلمة الأساسية open.

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

تضيف كوتلين 1.3 (المستقرة في stdlib ؛ عقود تجريبية يحددها المستخدم) دعماً للعقود[32] (مستوحى من نموذج برمجة إيفل تصميم بالعقود[33] )

وفقاً لمطوري كوتلين، يمكنك استدعاء كود جاڤاسكريپت من كوتلين، على سبيل المثال كتابة تطبيقات رياكت كاملة، من النوع الآمن، أو كتابة وصيانة تطبيقات وب كاملة المكدس\حزمة كاملة تشارك منطق التحقق مع الواجهة الأمامية، أو يمكنك "إنشاء مكتبات من كود كوتلين الخاص بك يمكن استهلاكها كـ وحدات من أي قاعدة تعليمات برمجية مكتوبة بلغة جاڤاسكريپت أو تايپ سكريپت".[34]

بناء اللغة

قالب:Howto

أسلوب البرمجة الإجرائية

تخفف كوتلين قيود جاڤا على السماح لأساليب ومتغيرات جامدة بالتواجد فقط داخل هيكل الفئة. يمكن تعريف الكائنات والتوابع الثابتة في المستوى الأعلى للحزمة\للمكدس دون الحاجة إلى مستوى فئة فائض. للتوافق مع جاڤا، توفر كوتلين تعليقاً توضيحياً JvmName يحدد اسم الفئة المستخدم عند عرض الحزمة من مشروع جاڤا. على سبيل المثال، @file:JvmName("JavaClassName").

نقطة الدخول الرئيسية

كما هو الحال في C و C ++ و C# و جاڤا وگو، فإن نقطة الدخول إلى برنامج كوتلين هي تابع يسمى "main"، والتي يمكن تمرير مصفوفة تحتوي على أي وسيطات سطر أوامر. هذا اختياري منذ كوتلين 1.3.[35]وتم دعم كل من پرل، بي.إتش.بي و شل يونكس. استدلال النمط مدعوم أيضاً.

// Hello, World! example
fun main() {
    val scope = "World"
    println("Hello, $scope!")
}

fun main(args: Array<String>) {
    for (arg in args) {
        println(arg)
    }
}

الدوال الامتدادية

على غرار C#، تسمح كوتلين للمستخدم بإضافة دوال إلى أي فئة دون الإجراءات الشكلية لإنشاء فئة مشتقة بدوال جديدة. بدلاً من ذلك، تضيف كوتلين مفهوم الدوال الامتدادية الذي يسمح بوظيفة "لصقها" في قائمة الدوال العامة لأي فئة دون وضعها رسمياً داخل الفئة. بمعنى آخر، دالة الامتداد هي دالة مساعدة لها حق الوصول إلى جميع الواجهة العامة للفئة التي يمكن استخدامها لإنشاء واجهة دالة جديدة لفئة مستهدفة وستظهر هذه الدالة تماماً مثل دالة الفئة، حيث تظهر كجزء من فحص إكمال التعليمات البرمجية لدوال الفئة. على سبيل المثال:

package MyStringExtensions

fun String.lastChar(): Char = get(length - 1)

>>> println("Kotlin".lastChar())

بوضع الشفرة السابقة في المستوى الأعلى للمكدس، يتم توسيع فئة سلسلة لتشمل دالة lastChar التي لم يتم تضمينها في التعريف الأصلي لفئة سلسلة.

// Overloading '+' operator using an extension function
operator fun Point.plus(other: Point): Point {
    return Point(x + other.x, y + other.y)
}

>>> val p1 = Point(10, 20)
>>> val p2 = Point(30, 40)
>>> println(p1 + p2)
Point(x=40, y=60)

تفريغ الوسيطات مع عامل الامتداد

على غرار پايثون، تقوم علامة النجمة (*) لعامل الامتداد بتفريغ محتويات المصفوفة كوسيطات مفصولة بفاصلة لدالة:

fun main(args: Array<String>) { 
    val list = listOf("args: ", *args)
    println(list)
}

تصريحات الإتلاف

تحلل تصريحات الإتلاف كائناً إلى متغيرات متعددة في وقت واحد، على سبيل المثال. قد يتم إتلاف كائن إحداثيات ثنائي الأبعاد إلى عددين صحيحين x و y.

على سبيل المثال، يدعم الكائن Map.Entry التدمير لتبسيط الوصول إلى مجالي المفتاح والقيمة الخاص به:

for ((key, value) in map) {
    println("$key: $value")
}

توابع متداخلة

تسمح كوتلين بالتصريح عن التوابع المحلية داخل دوال أو طرق أخرى.

class User(val id: Int, val name: String, val address: String)
    
fun saveUserToDb(user: User) {
    fun validate(user: User, value: String, fieldName: String) {
        require(value.isNotEmpty()) { "Can't save user ${user.id}: empty $fieldName" }
    }
    
    validate(user, user.name, "Name") 
    validate(user, user.address, "Address")
    // Save user to the database 
    ...
}

الفئات نهائية بشكل افتراضي

في كوتلين، لاشتقاق فئة جديدة من نوع فئة أساسية، يجب وضع علامة صريحة على الفئة الأساسية على أنها "مفتوحة". هذا على عكس معظم اللغات كائنية التوجه مثل جاڤا حيث تكون الفئات مفتوحة بشكل افتراضي.

مثال على فئة أساسية مفتوحة لاشتقاق فئة فرعية جديدة منها.

// open on the class means this class will allow derived classes
open class MegaButton  {

    // no-open on a function means that 
    //    polymorphic behavior disabled if function overridden in derived class
    fun disable() { ... }

    // open on a function means that
    //    polymorphic behavior allowed if function is overridden in derived class
    open fun animate() { ... }
}

class GigaButton: MegaButton {

    // Explicit use of override keyword required to override a function in derived class
    override fun animate() { println("Giga Click!") } 
}

الفئات المجردة مفتوحة بشكل افتراضي

تعرف الفئة المجردة توابع العنصر النائب المجرد أو "محض ظاهري" التي سيتم تعريفها في فئة مشتقة. وتكون الفئات المجردة مفتوحة بشكل افتراضي.

// No need for the open keyword here, it’s already open by default
abstract class Animated {

    // This virtual function is already open by default as well
    abstract fun animate()
  
    open fun stopAnimating() { }

    fun animateTwice() { }
}

الفئات عامة بشكل افتراضي

توفر كوتلين الكلمات الأساسية التالية لتقييد الوضوح لتصريح المستوى الأعلى، مثل الفئات، وعناصر الفئة: public, internal, protected, and private.

عند تطبيق أحد عناصر الفئة:

الكلمة المفتاحية الوضوح
public (افتراضية) في كل مكان
internal ضمن وحدة
protected ضمن الفئات الفرعية
private ضمن الفئات

عند تطبيقه على تصريح عالي المستوى:

الكلمة المفتاحية الوضوح
public (افتراضية) في كل مكان
internal ضمن وحدة
private ضمن ملف

مثال:

// Class is visible only to current module
internal open class TalkativeButton : Focusable {
    // method is only visible to current class 
    private   fun yell() = println("Hey!")

    // method is visible to current class and derived classes
    protected fun whisper() = println("Let's talk!")
}


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

المُنشئ الأساسي مقابل المُنشئ الثانوي

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

// Example of class using primary constructor syntax
// (Only one constructor required for this class)
open class PowerUser : User (
    protected val nickname: String, 
    final override var isSubscribed: Boolean = true) 
    {
         ...
    }

ومع ذلك، في الحالات التي تتطلب أكثر من مُنشئ واحد للفئة، يمكن استخدام مُنشئ أكثر عمومية يسمى بناء جملة المُنشئ الثانوي والذي يشبه إلى حد بعيد بناء جملة المُنشئ المستخدم في معظم اللغات الموجهة للكائنات مثل C++ و C# و وجاڤا.

// Example of class using secondary constructor syntax
// (more than one constructor required for this class)
class MyButton : View {

    // Constructor #1 
    constructor(ctx: Context) : super(ctx) { 
        // ... 
    } 
  
    // Constructor #2
    constructor(ctx: Context, attr: AttributeSet) : super(ctx, attr) { 
        // ... 
    }
}

فئات البيانات

تحدد بنية data class في كوتلين الفئات التي يتمثل هدفها الأساسي في تخزين البيانات. يشبه هذا التكوين الفئات العادية فيما عدا أن التوابع الرئيسية equals و toString و hashCode يتم إنشاؤها تلقائياً من خصائص الفئة. في جاڤا، من المتوقع أن توفر مثل هذه الفئات مجموعة قياسية من التوابع مثل تلك. لا يُطلب من فئات البيانات الإعلان عن أي طرق، على الرغم من أن كل منها يجب أن يكون لها خاصية واحدة على الأقل. غالباً ما تتم كتابة فئة البيانات بدون جسم\هيكل، على الرغم من أنه من الممكن إعطاء فئة البيانات أي طرق أو منشئات ثانوية صالحة لأي فئة أخرى. يتم استخدام الكلمة الأساسية data قبل الكلمة الأساسية class لتحديد فئة البيانات.[36]

fun main(args: Array) {
    // create a data class object like any other class object
    var book1 = Book("Kotlin Programming", 250)
    println(book1)
    // output: Book(name=Kotlin Programming, price=250)
}
     
// data class with parameters and their optional default values
data class Book(val name: String = "", val price: Int = 0)

هيكل كوتلين التفاعلي

$ kotlinc-jvm
type :help for help; :quit for quit
>>> 2 + 2
4
>>> println("Hello, World!")
Hello, World!
>>>

كوتلين كلغة برمجة

يمكن أيضاً استخدام كوتلين كلغة برمجة نصية. البرنامج النصي هو ملف مصدر كوتلين (.kts) بشيفرة قابلة للتنفيذ من المستوى الأعلى.

// list_folders.kts
import java.io.File
val folders = File(args[0]).listFiles { file -> file.isDirectory() }
folders?.forEach { folder -> println(folder) }

يمكن تشغيل البرامج النصية بتمرير الخيار -script وملف البرنامج النصي المقابل إلى المترجم\المصرف.

$ kotlinc -script list_folders.kts "path_to_folder_to_inspect"

سلامة فارغة

تميز كوتلين بين أنواع البيانات الفارغة و غير الفارغة. يجب التصريح عن جميع الكائنات القابلة للإلغاء بعلامة "؟" postfix بعد اسم النوع. تتطلب العمليات على الكائنات الفارغة عناية خاصة من المطورين: يجب إجراء فحص الصفري قبل استخدام القيمة. توفر كوتلين عوامل تشغيل آمنة خالية من الأخطاء لمساعدة المطورين:

  • ?. (عامل التنقل الآمن)يمكن استخدامها للوصول بأمان إلى طريقة أو خاصية كائن لاغٍ محتمل. إذا كان الكائن فارغاً، فلن يتم استدعاء الطريقة وسيتم تقييم التعبير على أنه فارغ.
  • ?: (عامل دمج فارغ) يُشار إليه غالبًا باسم عامل إلڤس:
fun sayHello(maybe: String?, neverNull: Int) {
    // use of elvis operator
    val name: String = maybe ?: "stranger"
    println("Hello $name")
}

مثال على استخدام عامل التنقل الآمن:

// returns null if...
// - foo() returns null,
// - or if foo() is non-null, but bar() returns null,
// - or if foo() and bar() are non-null, but baz() returns null.
// vice versa, return value is non-null if and only if foo(), bar() and baz() are non-null
foo()?.bar()?.baz()

لامدا

توفر كوتلين الدعم لـ توابع ذات رتبة عليا و توابع مجهولة أو لامدا.[37]

// the following function takes a lambda, f, and executes f passing it the string, "lambda"
// note that (s: String) -> Unit indicates a lambda with a String parameter and Unit return type
fun executeLambda(f: (s: String) -> Unit) {
    f("lambda")
}

يتم التصريح عن لامدا باستخدام الأقواس، { } . إذا كانت لامدا تأخذ معاملات، فسيتم التصريح عنها داخل الأقواس متبوعة بالمعامل ->.

// the following statement defines a lambda that takes a single parameter and passes it to the println function
val l = { c : Any? -> println(c) }
// lambdas with no parameters may simply be defined using { }
val l2 = { print("no parameters") }

مثال على "hello world" مركب

fun main(args: Array<String>) {
    greet {
        to.place
    }.print()
}

// Inline higher-order functions
inline fun greet(s: () -> String) : String = greeting andAnother s()

// Infix functions, extensions, type inference, nullable types, 
// lambda expressions, labeled this, Elvis operator (?:)
infix fun String.andAnother(other : Any?) = buildString() 
{ 
    append(this@andAnother); append(" "); append(other ?: "") 
}

// Immutable types, delegated properties, lazy initialization, string templates
val greeting by lazy { val doubleEl: String = "ll"; "he${doubleEl}o" }

// Sealed classes, companion objects
sealed class to { companion object { val place = "world"} }

// Extensions, Unit
fun String.print() = println(this)

الأدوات

  • يحتوي IntelliJ IDEA على دعم إضافي لـ كوتلين.[38] كان IntelliJ IDEA 15 هو الإصدار الأول الذي يجمع مكون كوتلين الإضافي في مثبت IntelliJ، ويوفر دعم كوتلين خارج الصندوق.[39]
  • توفر جت براينز أيضاً مكوناً إضافياً لـ إكلپس.[40][41]
  • يتم دعم التكامل مع أدوات بناء جاڤا الشائعة بما في ذلك أپاتشي ميڤن،[42] أپاتشي آنت،[43] وگريدل.[44]
  • أندرويد استوديو (اعتماداً على IntelliJ IDEA) لديه دعم رسمي لـ كوتلين، بدءاً من أندرويد استوديو 3.[45]
  • إيماكس لديه وضع كوتلين في مستودع حزم ملپا الخاص به.
  • يحتوي ڤيم على مكون إضافي يتم الاحتفاظ به على گيت‌هَب.[46]
  • يولد Json2Kotlin POJO نمط شيفرة كوتلين أصلي لتخطيط استجابة خدمة الوب.

تطبيقات

عندما تم الإعلان عن كوتلين كلغة تطوير أندرويد رسمية في گوگل آي/أو في مايو 2017، أصبحت اللغة الثالثة المدعومة بالكامل لنظام أندرويد، بالإضافة إلى Java و C++.[47]اعتباراً من عام 2020، لا يزال كوتلين مستخدماً على نطاق واسع على أندرويد، حيث تقدر گوگل أن 70 ٪ من أفضل 1000 تطبيق على متجر پلاي مكتوبة بلغة كوتلين. تمتلك گوگل نفسها 60 تطبيقاً مكتوباً بلغة كوتلين، بما في ذلك الخرائط و درايڤ. العديد من تطبيقات أندرويد، مثل صفحة گوگل الرئيسية، في طور الترحيل إلى كوتلين، وبالتالي تستخدم كلاً من كوتلين وجاڤا. يُنظر إلى كوتلين على نظام أندرويد على أنه مفيد لسلامة المؤشر الفارغ بالإضافة إلى ميزاته التي تجعل رمزاً أقصر وأكثر قابلية للقراءة.[48]

بالإضافة إلى استخدامها البارز على أندرويد، تكتسب كوتلين زخماً في التطوير من جانب المخدم. أضاف سپرنگ فريم وورك دعم كوتلين رسمياً مع الإصدار 5 في 4 يناير 2017.[49] لمزيد من الدعم لـ كوتلين، قامت سپرنگ بتحويل جميع وثائقها إلى كوتلين وأضافت دعماً مدمجاً للعديد من الميزات الخاصة بـ كوتلين مثل الروتينات التشاركية.[50] بالإضافة إلى سپرنگ، أنتجت جت براينز إطار عمل كوتلين-فرست يسمى Ktor لبناء تطبيقات الوب.[51]

في عام 2020، وجدت جت براينز في دراسة استقصائية للمطورين الذين يستخدمون كوتلين أن 56٪ كانوا يستخدمون كوتلين لتطبيقات الأجهزة المحمولة، بينما كان 47٪ يستخدمونها للوصول للوب. قال ما يزيد قليلاً عن ثلث مطوري كوتلين أنهم كانوا يهاجرون إلى كوتلين من لغة أخرى. كان معظم مستخدمي كوتلين يستهدفون أندرويد (أو غير ذلك على JVM)، مع 6٪ فقط يستخدمون كوتلين تيتڤ.[52]

الرعاية

في عام 2018، كانت كوتلين هي اللغة الأسرع نمواً على گيت‌هَب مع مطورين أكثر 2.6 مرة مقارنة بعام 2017.[53] إنها لغة البرمجة الرابعة الأكثر شعبية وفقًا لاستطلاع 2020 مسح مطوري ستاك أوڤرفلو\Stack Overflow.[54]

حصلت كوتلين أيضاً على جائزة انطلاق مؤتمر برمجيات أورايلي مفتوحة المصدر لعام 2019.[55]

استخدمت العديد من الشركات / المنظمات كوتلين لتطوير الوصول لنظامها:

استخدمت بعض الشركات / المنظمات كوتلين لتطوير الوب:

صرّح عدد من الشركات علناً أنهم كانوا يستخدمون كوتلين:


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

انظر أيضاً

المراجع

  • تحتوي هذه المقالة على اقتباسات من دروس كوتلين التعليمية والتي تم إصدارها بموجب ترخيص أپاتشي 2.0.
  1. ^ "JetBrains/kotlin". GitHub.
  2. ^ "Release Kotlin 1.5.0-RC · JetBrains/kotlin". GitHub (in الإنجليزية).
  3. ^ "JetBrains/kotlin". GitHub (in الإنجليزية). Retrieved 29 مارس 2021.
  4. ^ "Release build-1.5.0-RC-487 · JetBrains/kotlin". GitHub (in الإنجليزية). Retrieved 19 مارس 2021.
  5. ^ "New Language Features Preview in Kotlin 1.4.30 | The Kotlin Blog". JetBrains Blog (in الإنجليزية الأمريكية). Retrieved 19 مارس 2021.
  6. ^ "What is the correct English pronunciation of Kotlin?". 16 أكتوبر 2019. Retrieved 9 نوفمبر 2019.
  7. ^ "kotlin-stdlib". kotlinlang.org. JetBrains. Retrieved 20 أبريل 2018.
  8. ^ "Kotlin for JavaScript - Kotlin Programming Language". Kotlin (in الإنجليزية). Retrieved 20 أغسطس 2020.
  9. ^ "Kotlin for cross-platform mobile development". JetBrains: Developer Tools for Professionals and Teams (in الإنجليزية). Retrieved 20 أغسطس 2020.
  10. ^ "Kotlin Foundation - Kotlin Programming Language". Kotlin.
  11. ^ أ ب "Kotlin is now Google's preferred language for Android app development". TechCrunch (in الإنجليزية الأمريكية). Retrieved 8 مايو 2019.
  12. ^ "Kotlin FAQ". Kotlin lets you choose the version of JVM for execution. By default, the Kotlin/JVM compiler produces Java 8 compatible bytecode. If you want to make use of optimizations available in newer versions of Java, you can explicitly specify the target Java version from 6 to 16. Note that in this case the resulting bytecode might not run on lower versions.
  13. ^ "What's New in Kotlin 1.4 - Kotlin Programming Language". Kotlin (in الإنجليزية). Retrieved 20 أغسطس 2020. Kotlin can now generate type annotations in the JVM bytecode (target version 1.8+) [..] Note that the type annotations from the standard library aren't emitted in the bytecode for now because the standard library is compiled with the target version 1.6.
  14. ^ "What's new in Kotlin 1.4.30 | Kotlin". Kotlin Help (in الإنجليزية الأمريكية). Retrieved 19 مارس 2021.
  15. ^ "What's new in Kotlin 1.4.30 | Kotlin". Kotlin Help (in الإنجليزية الأمريكية). 11 فبراير 2021. Retrieved 19 مارس 2021.
  16. ^ أ ب Krill, Paul (22 يوليو 2011). "JetBrains readies JVM language Kotlin". InfoWorld. Archived from the original on 7 سبتمبر 2019. Retrieved 2 فبراير 2014.
  17. ^ Waters, John (22 فبراير 2012). "Kotlin Goes Open Source". ADTmag.com. 1105 Enterprise Computing Group. Archived from the original on 18 فبراير 2014. Retrieved 2 فبراير 2014.
  18. ^ Mobius (8 January 2015), Андрей Бреслав — Kotlin для Android: коротко и ясно, https://www.youtube.com/watch?v=VU_L2_XGQ9s, retrieved on 28 May 2017 
  19. ^ Kieron Murphy (4 أكتوبر 1996). "So why did they decide to call it Java?". JavaWorld. Archived from the original on 15 مارس 2019. Retrieved 14 أكتوبر 2017.
  20. ^ "Why JetBrains needs Kotlin". we expect Kotlin to drive the sales of IntelliJ IDEA
  21. ^ "Kotlin 1.0 Released: Pragmatic Language for JVM and Android | Kotlin Blog". Blog.jetbrains.com. 15 فبراير 2016. Retrieved 11 أبريل 2017.
  22. ^ Shafirov, Maxim (17 مايو 2017). "Kotlin on Android. Now official". Today, at the Google I/O keynote, the Android team announced first-class support for Kotlin.
  23. ^ "Kotlin 1.2 Released: Sharing Code between Platforms | Kotlin Blog". blog.jetbrains.com. 28 نوفمبر 2017.
  24. ^ "Multiplatform Projects - Kotlin Programming Language". Kotlin. Retrieved 20 أغسطس 2020. Working on all platforms is an explicit goal for Kotlin, but we see it as a premise to a much more important goal: sharing code between platforms. With support for JVM, Android, JavaScript, iOS, Linux, Windows, Mac and even embedded systems like STM32, Kotlin can handle any and all components of a modern application.
  25. ^ "Kotlin/kotlin-full-stack-application-demo". Kotlin. 3 أبريل 2020. Retrieved 4 أبريل 2020.
  26. ^ "Kotlin full stack app demo: update all involving versions to work with 1.3.70 release". youtrack.jetbrains.com. Retrieved 4 أبريل 2020.
  27. ^ "What's New in Kotlin 1.4 - Kotlin Programming Language". Kotlin (in الإنجليزية). Retrieved 20 أغسطس 2020. In 1.4.0, we slightly change the Swift API generated from Kotlin with respect to the way exceptions are translated.
  28. ^ "JVM Languages Report extended interview with Kotlin creator Andrey Breslav". Zeroturnaround.com. 22 أبريل 2013. Retrieved 2 فبراير 2014.
  29. ^ "Semicolons". jetbrains.com. Retrieved 8 فبراير 2014.
  30. ^ "Basic Syntax". Kotlin. Jetbrains. Retrieved 19 يناير 2018.
  31. ^ "functions". jetbrains.com. Retrieved 8 فبراير 2014.
  32. ^ "What's New in Kotlin 1.3 - Kotlin Programming Language". Kotlin. Retrieved 4 أبريل 2020.
  33. ^ "Design by Contract (DbC) design considerations". Kotlin Discussions (in الإنجليزية الأمريكية). 16 أغسطس 2012. Retrieved 4 أبريل 2020. Implement the full semantics of Eiffel DbC and improve upon it.
  34. ^ "Kotlin for JavaScript | Kotlin". Kotlin Help (in الإنجليزية الأمريكية). 21 يناير 2021. Retrieved 19 مارس 2021.
  35. ^ "Kotlin Examples: Learn Kotlin Programming By Example".
  36. ^ "Introduction to Data Classes in Kotlin".
  37. ^ "Higher-Order Functions and Lambdas". Kotlin. Jetbrains. Retrieved 19 يناير 2018.
  38. ^ "Kotlin :: JetBrains Plugin Repository". Plugins.jetbrains.com. 31 مارس 2017. Retrieved 11 أبريل 2017.
  39. ^ "What's New in IntelliJ IDEA 2017.1". Jetbrains.com. Retrieved 11 أبريل 2017.
  40. ^ "Getting Started with Eclipse Neon – Kotlin Programming Language". Kotlinlang.org. 10 نوفمبر 2016. Retrieved 11 أبريل 2017.
  41. ^ "JetBrains/kotlin-eclipse: Kotlin Plugin for Eclipse". GitHub. Retrieved 11 أبريل 2017.
  42. ^ "Using Maven – Kotlin Programming Language". kotlinlang.org. Retrieved 9 مايو 2017.
  43. ^ "Using Ant – Kotlin Programming Language". kotlinlang.org. Retrieved 9 مايو 2017.
  44. ^ "Using Gradle – Kotlin Programming Language". kotlinlang.org. Retrieved 9 مايو 2017.
  45. ^ "Kotlin and Android". Android Developers.
  46. ^ "udalov/kotlin-vim: Kotlin plugin for Vim. Featuring: syntax highlighting, basic indentation, Syntastic support". GitHub. Retrieved 30 أغسطس 2019.
  47. ^ Lardinois, Frederic (17 مايو 2017). "Google makes Kotlin a first-class language for writing Android apps". techcrunch.com (in الإنجليزية الأمريكية). Retrieved 28 يونيو 2018.
  48. ^ "Kotlin programming language: How Google is using it to squash the code bugs that cause most crashes". ZDNet.
  49. ^ "Introducing Kotlin support in Spring Framework 5.0". Spring. Pivotal. Retrieved 29 سبتمبر 2020.
  50. ^ "The State of Kotlin Support in Spring". JetBrains (in الإنجليزية). Retrieved 6 ديسمبر 2020.
  51. ^ "Review of Microservices Frameworks: A Look at Spring Boot Alternatives". DZone.
  52. ^ "Kotlin Programming - The State of Developer Ecosystem 2020". JetBrains (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  53. ^ "The state of the Octoverse". Archived from the original on 22 مارس 2019. Retrieved 24 يوليو 2019.
  54. ^ "Stack Overflow Developer Survey 2020". Retrieved 28 مايو 2020.
  55. ^ "Kotlin wins Breakout Project of the Year award at OSCON '19". Retrieved 24 يوليو 2019.
  56. ^ "State of Kotlin on Android". YouTube. Retrieved 29 سبتمبر 2020.
  57. ^ "KotlinConf 2019: Kotlin Runs Taxes in Norway by Jarle Hansen & Anders Mikkelsen". YouTube. Retrieved 29 سبتمبر 2020.
  58. ^ "Gradle Kotlin DSL Primer". docs.gradle.org. Retrieved 29 سبتمبر 2020.
  59. ^ "QLDB at Amazon". Talking Kotlin. Retrieved 29 سبتمبر 2020.
  60. ^ "Going Full Kotlin Multiplatform". Talking Kotlin (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  61. ^ "Kotless". Talking Kotlin (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  62. ^ "Using Kotlin for backend development at Flux". Talking Kotlin (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  63. ^ "Kotlin at Allegro". Talking Kotlin (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  64. ^ "Greenfield Kotlin at OLX". Talking Kotlin (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  65. ^ "Kotlin at Shazam". Talking Kotlin (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  66. ^ "Application Monitoring with Micrometer". Talking Kotlin (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  67. ^ "Groovy and Kotlin Interop at Rocket Travel". Talking Kotlin (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  68. ^ "Kotlin on the backend at Meshcloud". Talking Kotlin (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  69. ^ "Zally - An API Linter". Talking Kotlin (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  70. ^ "KotlinConf 2019: Kotlin in Space by Maxim Mazin". YouTube. Retrieved 29 سبتمبر 2020.
  71. ^ "KotlinConf 2017 - Frontend Kotlin from the Trenches by Gaetan Zoritchak". YouTube. Retrieved 29 سبتمبر 2020.
  72. ^ "Fritz2". Talking Kotlin (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  73. ^ "Java/Kotlin Developer - Barclays - Prague - Wizbii". Wizbii.com (in الإنجليزية). Retrieved 29 سبتمبر 2020.
  74. ^ "Kotlin in Production – What works, Whats broken". Blog.dripstat.com. 24 سبتمبر 2016. Retrieved 11 أبريل 2017.
  75. ^ "How we made Basecamp 3's Android app 100% Kotlin – Signal v. Noise". Signal v. Noise. 29 أبريل 2017. Retrieved 1 مايو 2017.
  76. ^ "Droidcon NYC 2016 - Kotlin in Production". Retrieved 24 يوليو 2019.
  77. ^ "Becoming bilingual@coursera". Retrieved 24 يوليو 2019.
  78. ^ "Rob Spieldenner on twitter". Retrieved 24 يوليو 2019.
  79. ^ "2017 Who's using Kotlin?". Retrieved 24 يوليو 2019.
  80. ^ "square/sqldelight". Retrieved 24 يوليو 2019.
  81. ^ "Dan Lew on Twitter". Retrieved 24 يوليو 2019.
  82. ^ "Duolingo on Twitter". Retrieved 13 أبريل 2020.
  83. ^ "Kotlin 1.1 Released with JavaScript Support, Coroutines and more". Retrieved 1 مايو 2017.

وصلات خارجية