الحزم (Packages) في Kotlin

من موسوعة حسوب
مراجعة 10:26، 10 مارس 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (تغيير عنوان الصفحة)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

التصريح عن الحزم

يبدأ الملف المصدريّ (source file) عادةً بالتصريح (declaration) عن الحزم مثل:

package foo.bar

fun baz() {}

class Goo {}

// ...

ويتوضع حينها كلُّ ما يحتويه هذا الملف (كالأصناف [classes] والدوال [functions] مثلًا) في الحزمة المُصرَّح عنها ببدايته، ففي الشيفرة السابقة إن الاسم الفعليّ الكامل للدالة baz()‎ هو foo.bar.baz والاسم الكامل للصنف Goo هو foo.bar.Goo.

وإذا لم تُحدَّد الحزمة في بداية الملف فإن محتوياته تتبع للحزمة الافتراضيّة "default" التي لا اسم لها.

استيراد الحزم الافتراضيّة (Default Imports)

يُستورَد عددٌ من الحزم تلقائيًا لتُضمَّن في كل ملف، وهي:

  • kotlin.*‎
  • kotlin.annotation.*‎
  • kotlin.collections.*‎
  • kotlin.comparisons.*‎ (بدءًا من الإصدار 1.1)
  • kotlin.io.*‎
  • kotlin.ranges.*‎
  • kotlin.sequences.*‎
  • kotlin.text.*‎

وتُستورَد بعض الحزم الإضافيّة بحسب منصّة العمل المستهدفة ( target platform)، وهي:

  • JVM:
    • java.lang.*‎
    • kotlin.jvm.*‎
  • JS:
    • kotlin.js.*‎

عمليات الاستيراد الإضافيّة (Imports)

قد تحتوي الملفات على عمليات استيراد حزم أخرى غير الحزم الافتراضيّة، ولها عدة حالات:

  • الاستيراد عبر اسم واحد، مثل:
import foo.Bar // الوصول متاح بدون قيود لـ Bar
  • استيراد كافة المحتويات الواقعة في مجال (scope) (حزمة أو صنف أو كائن أو ...إلخ.)، مثل:
import foo.* // الوصول متاح لكل محتوىً موجود في foo

وقد يحدث اختلاطٌ ما بين اسمين متشابهين؛ حينها تُستخدم التسمية البديلة بالاعتماد على الكلمة المفتاحيّة as مثل:

import foo.Bar // 
import bar.Bar as bBar // تعبّر التسمية البديلة عن 'bar.Bar'

ولا تقتصِر الكلمة المفتاحيّة import على استيراد الأصناف وحسب، بل تُستخدم أيضًا لاستيراد تصريحات أخرى مثل:

- الدوال (functions) أو الخاصّيّات (properties) بمستوى أعلى (top-level)

- الدوال (functions) أو الخاصّيّات (properties) المُصرَّح عنها في تصريحات الكائن (object declarations)

- الثوابت المتعددة (enum constants)

ولا تدعم لغة Kotlin صيغة الاستيراد "import static" (كما هو الحال في لغة Java) إذ تُستورَد هذه التصريحات عبر الكلمة المفتاحية import الاعتياديّة.

مرئية الوصول للتصريحات بمستوى أعلى (Visibility of Top-level Declarations)

إذا كان التصريح ذو المستوى الأعلى مُحدَّدًا من نوع خاصّ (private) فإنه خاصٌّ بالملف الذي يحتويه فقط. (راجع محددات الوصول Visibility Modifiers )

مصادر