JavaRush /مدونة جافا /Random-AR /هل هناك فرق بين Kotlin و Java؟
Paul Soia
مستوى
Kiyv

هل هناك فرق بين Kotlin و Java؟

نشرت في المجموعة
أهلاً بكم. أريد أن أخبرك ببعض الأشياء الأساسية حول لغة Kotlin، والتي ستكون مفيدة للمبتدئين. لقد حدث أنه سيكون من الصعب الآن الدخول في تطوير Android بلغة واحدة فقط - حيث تبدأ كتابة معظم المشاريع الجديدة بلغة Kotlin، وتتم كتابة معظم المشاريع الجاهزة بلغة Java. هل هناك فرق بين Kotlin و Java؟  - 1لدي حاليًا 4 مشاريع في العمل: اثنان في Kotlin واثنان في Java (واحد رئيسي كبير وثلاثة مشاريع صغيرة للاستخدام الداخلي). عندما قررت الشركة كتابة مشاريع جديدة في كوتلين، بدا لي هذا القرار غريبا. لماذا الخلط بين اللغات المختلفة؟ دع شخصًا آخر يكتب بلغة Kotlin، لماذا نحتاجها؟ ولكن لم يكن هناك مخرج، لذلك قررت تجربة لغة جديدة وبدأت في دراستها. الكود الأول، بالطبع، تمت كتابته بالكامل بأسلوب Java، مما زاد من سوء الفهم: لماذا أحتاج إلى لغة جديدة؟ ولكن عندما استخدمتها، وجدت المزيد والمزيد من المزايا والآن (لقد كنت أكتب في Kotlin منذ عامين تقريبًا) أستطيع أن أقول إن Kotlin أكثر ملاءمة في تطوير Android. أريد أن أعرض بعض الفروق الدقيقة التي لن تكون واضحة لمن قرر البدء في تعلم Kotlin بعد Java. دعني أذكرك أيضًا أن Android يستخدم Java 8، والإصدار الحالي هو 14. لذا، أولاً - المتغيرات : Java:
Int a = 1;
String s = "test";
كوتلين:
val a = 1
var b = 2
val c: Int
val d = "test"
هناك نوعان من المتغيرات في Kotlin: val (للقراءة فقط) و var (للقراءة والكتابة). يوصى باستخدام val كلما أمكن ذلك. ليس من الضروري الإعلان عن نوع المتغير إذا كان المتغير قد تمت تهيئته بالفعل. ثانيًا - إذا/إلا، قم بتبديل العبارات : كم مرة تستخدم سلسلة العبارات هذه في Java:
if (вариант 1)
{...}
else if (вариант 2)
{...}
...
else
{...}
او مثل هذا:
switch(выражениеДляВыбора) {
        case (meaning 1):
                Код1;
                break;
        case (meaning 2):
                Код2;
                break;
...
        case (meaning N):
                КодN;
                break;
        default:
                КодВыбораПоУмолчанию;
                break;
        }
في Kotlin، يتم استخدام عامل التشغيل When لمثل هذه التعبيرات (على الرغم من إمكانية استخدام if/else أيضًا):
val x = 5
val result = when(x) {
        0, 1 -> "cool"
        2 -> "bad"
        5 -> "normal"
        else -> "error"
}
System.out.println(result)
لم نقم هنا باستعراض سلسلة الشروط فحسب، بل قمنا أيضًا بتعيين التعبير بأكمله على الفور لمتغير النتيجة، مما وفر لنا عددًا لا بأس به من أسطر التعليمات البرمجية. ولكن مع ذلك، إذا كان لديك خياران فقط في الفرع، فإنني أوصي باستخدام الخيار المعتاد if..else. متى سيكون البناء أقصر فقط من بين ثلاثة خيارات. دعونا نمضي قدما - البنائين . إنها حكاية خرافية هنا. ما عليك سوى مقارنة الكود الموجود في Java وKotlin. جافا:
public class Person {

    private String firstName;
    private String lastName;
    private int age;

    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
كوتلين:
class Person(private val firstName: String,
             private val lastName: String,
             private var age: Int) {
}
قد يبدو أن شيئًا ما قد ترك غير مكتمل في كود Kotlin. لكن لا، هذان رمزان متطابقان بلغات مختلفة. دعونا معرفة ذلك قليلا. في Kotlin، يمكن كتابة المنشئ مباشرة في نص اسم الفئة (ولكن إذا أردت، يمكنك القيام بذلك بالطريقة القديمة، كما هو الحال في Java). لذلك، قمنا بكتابة ثلاثة متغيرات، في Java قمنا بإنشاء مُنشئ وحروف وضابط واحد لمتغير العمر. في Kotlin، كما نتذكر، يكون المتغير val للقراءة فقط، وبالتالي فإن أداة ضبط هذه المتغيرات غير متوفرة (تطبق Kotlin أدوات ضبط getter تحت الغطاء نفسه). يتيح لك المتغير var استخدام أداة الضبط. ونتيجة لذلك، كتبنا في سطر واحد تقريبًا نفس الشيء الذي استغرق أكثر من عشرة أسطر في Java. أوصي هنا بقراءة المزيد عن فئات البيانات في Kotlin. ولكن هذا ليس كل ما يجيده منشئو Kotlin. ولكن ماذا لو كنت بحاجة إلى صانعين؟ ماذا لو كان هناك ثلاثة؟ في Java سيبدو الأمر كما يلي:
public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

public Person(String firstName) {
        this.firstName = firstName;
    }
لا يوجد شيء معقد، فقط عدد المصممين حسب الحاجة، هذا ما فعلوه. في Kotlin، يمكنك التعامل مع مُنشئ واحد فقط. كيف؟ انها بسيطة - القيم الافتراضية.
class Person(private val firstName: String,
             private val lastName: String? = null,
             private var age: Int = 5) {
}
لقد قمنا بتعيين قيم افتراضية في المنشئ وسيبدو الاتصال بها الآن كما يلي:
Person(firstName = "Elon", lastName = "Mask", age = 45)
Person(firstName = "Elon", age = 45)
Person(firstName = "Elon", lastName = "Mask")
قد يطرح السؤال: ما هذا:
private val lastName: String? = null
ما هي علامات الاستفهام الأخرى هذه؟ نعم، إذا كانت القيمة فارغة، فسيتم تعيينها ?، وهناك أيضًا خيار مثل هذا - !!(إذا كان المتغير لا يقبل القيمة الخالية). اقرأ عن ذلك بنفسك، كل شيء بسيط. وننتقل إلى النقطة التالية. ملحقات . هذه أداة رائعة جدًا في Kotlin وغير متوفرة في Java. في بعض الأحيان نستخدم في المشروع أساليب القالب التي تتكرر في العديد من الفئات. على سبيل المثال، مثل هذا:
Toast.makeText(this, "hello world :)", Toast.LENGTH_SHORT).show();
في Kotlin يمكننا توسيع الفصل الدراسي:
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
ثم استخدمه على هذا النحو في جميع أنحاء المشروع:
context?.toast("hello world")
لقد قمنا بعمل امتداد لفئة السياق. والآن حيثما يتوفر السياق، ستكون طريقة النخب الجديدة متاحة. يمكن القيام بذلك لأي فئة: سلسلة، جزء، فئاتك المخصصة، لا توجد قيود. والنقطة الأخيرة التي سننظر إليها هي العمل مع السلاسل . كل شيء بسيط هنا. في جافا يتم كتابته مثل هذا:
String s = "friends";
int a = 5;
System.out.println("I have" + a + s + "!");
الأمر أسهل في كوتلين:
val s = "friends"
val a = 5
println("I have $a $s!")
هذه هي الفروق الدقيقة التي عثرت عليها في بداية تعلم لغة Kotlin، وآمل أن يساعدك هذا.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION