الفرق بين المراجعتين لصفحة: «Kotlin/packages»

من موسوعة حسوب
طلا ملخص تعديل
تصويبات
سطر 10: سطر 10:


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


وإذا لم تُحدَّد الحزمة في بداية الملف فإن محتوياته تتبع للحزمة الافتراضيّة "default" التي لا اسم لها.
وإذا لم تُحدَّد الحزمة في بداية الملف فإن محتوياته تتبع للحزمة الافتراضيّة "default" التي لا اسم لها.
سطر 19: سطر 19:
* <code>kotlin.annotation.*‎</code>
* <code>kotlin.annotation.*‎</code>
* <code>kotlin.collections.*‎</code>
* <code>kotlin.collections.*‎</code>
* <code>kotlin.comparisons.*‎ (بدءًا من الإصدار 1.1)</code>
* <code>kotlin.comparisons.*‎</code> (بدءًا من الإصدار 1.1)
* <code>kotlin.io.*‎</code>
* <code>kotlin.io.*‎</code>
* <code>kotlin.ranges.*‎</code>
* <code>kotlin.ranges.*‎</code>
سطر 35: سطر 35:
قد تحتوي الملفات على عمليات استيراد حزم أخرى غير الحزم الافتراضيّة، ولها عدة حالات:
قد تحتوي الملفات على عمليات استيراد حزم أخرى غير الحزم الافتراضيّة، ولها عدة حالات:
* الاستيراد عبر اسم واحد، مثل:
* الاستيراد عبر اسم واحد، مثل:
<syntaxhighlight>
<syntaxhighlight lang="kotlin">
import foo.Bar // الوصول متاح بدون قيود لـ Bar
import foo.Bar // الوصول متاح بدون قيود لـ Bar


</syntaxhighlight>
</syntaxhighlight>
* استيراد كافة المحتويات الواقعة في مجال (scope) (حزمة أو صنف أو كائن أو ... إلخ.)، مثل:
* استيراد كافة المحتويات الواقعة في مجال (scope) (حزمة أو صنف أو كائن أو ...إلخ.)، مثل:
<syntaxhighlight lang="kotlin">
<syntaxhighlight lang="kotlin">
import foo.* // الوصول متاح لكل محتوىً موجود في foo
import foo.* // الوصول متاح لكل محتوىً موجود في foo
</syntaxhighlight>وقد يحدث اختلاطٌ ما بين اسمين متشابهين؛ حينها تُستخدم التسمية البديلة بالاعتماد على الكلمة المفتاحيّة <code>as</code> مثل:<syntaxhighlight>
</syntaxhighlight>وقد يحدث اختلاطٌ ما بين اسمين متشابهين؛ حينها تُستخدم التسمية البديلة بالاعتماد على الكلمة المفتاحيّة <code>as</code> مثل:<syntaxhighlight lang="kotlin">
import foo.Bar //  
import foo.Bar //  
import bar.Bar as bBar // تعبّر التسمية البديلة عن 'bar.Bar'
import bar.Bar as bBar // تعبّر التسمية البديلة عن 'bar.Bar'
</syntaxhighlight>ولا تقتصِر الكلمة المفتاحيّة <code>import</code> على استيراد الأصناف وحسب، بل تُستخدم أيضًا لاستيراد تصريحات أخرى مثل:
</syntaxhighlight>ولا تقتصِر الكلمة المفتاحيّة <code>import</code> على استيراد الأصناف وحسب، بل تُستخدم أيضًا لاستيراد تصريحات أخرى مثل:


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


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


- [[Kotlin/enum classes|الثوابت المتعددة (enum constants)]]
- [[Kotlin/enum classes|الثوابت المتعددة (enum constants)]]

مراجعة 10:23، 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 )

مصادر