Swift: print() vs println() vs NSLog(): دليل كامل للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Swift: print() vs println() vs NSLog() — ماذا تختار ولماذا هذا مهم؟

\n\n

كل من يبدأ في تعلم Swift، عاجلاً أم آجلاً، يواجه إخراج البيانات إلى وحدة التحكم. قد يبدو الأمر بسيطاً؟ ولكن هنا يظهر الارتباك: print()، println() و NSLog() — ما الفرق؟ لماذا نحتاج إلى ثلاث طرق إذا كان بإمكاننا الاكتفاء بواحدة؟ في هذه المقالة، سنقوم بترتيب الأمور، ونعرض الأمثلة، ونساعدك على عدم الخلط بين هذه الدوال أبداً.

\n\n

يعتمد الموضوع على سؤال شائع حقيقي من Stack Overflow، حصد آلاف المشاهدات. قمنا بتكييفه ليكون محتوى تعليمياً، لتتمكن ليس فقط من الحفظ، بل من فهم منطق Swift.

\n\n
\n\n

تاريخ موجز: من Objective-C إلى Swift الحديث

\n\n

لفهم الفرق، نحتاج إلى الغوص قليلاً في التاريخ. Swift هي لغة حديثة (صدرت في عام 2014)، لكنها صُممت لتكون خليفة لـ Objective-C. لذلك، تتعايش فيها بسلام دوال Swift "الأصلية" والدوال القديمة القادمة من عالم Apple.

\n\n
    \n
  • println() — بقايا من الإصدارات الأولى جداً من Swift (قبل الإصدار 2.0). اليوم تم حذفها بالكامل.
  • \n
  • print() — البديل الحديث لـ println()، ظهر في Swift 2.0.
  • \n
  • NSLog() — دالة من عالم Objective-C، لا تزال تُستخدم بنشاط لتصحيح الأخطاء.
  • \n
\n\n

إذا كنت تكتب بلغة Swift الحديثة (الإصدار 4.x وما فوق)، فلن تصادف println() بعد الآن — فالمترجم سيعطي خطأ ببساطة. لكن في الدروس التعليمية القديمة والمنتديات، لا تزال تظهر، لذا من المهم فهم ما هي وماذا حل محلها.

\n\n
\n\n

print() — الأداة الرئيسية للإخراج

\n\n

كيف تعمل print()؟

\n\n

بدءاً من Swift 2.0، أصبحت print() الطريقة القياسية لإخراج البيانات إلى وحدة التحكم. إنها مرنة، بسيطة، ويمكن التحكم بها بالكامل.

\n\n
let name = "آنا"\nlet age = 25\n\nprint("مرحباً، \\(name)! عمرك \\(age) سنة.")\n// الإخراج: مرحباً، آنا! عمرك 25 سنة.
\n\n

الفرق الرئيسي عن println() القديمة هو أن print() لا تضيف حرف السطر الجديد تلقائياً. بالأحرى، تضيفه، لكن يمكنك التحكم في ذلك باستخدام المعامل terminator.

\n\n
// إخراج عادي\nprint("السطر الأول")\nprint("السطر الثاني")\n// الإخراج:\n// السطر الأول\n// السطر الثاني\n\n// إخراج بدون الانتقال إلى سطر جديد\nprint("السطر الأول", terminator: "")\nprint("السطر الثاني", terminator: "")\n// الإخراج: السطر الأولالسطر الثاني
\n\n

معاملات print()

\n\n
    \n
  • items — ما تقوم بإخراجه (يمكن أن يكون عدة قيم مفصولة بفواصل).
  • \n
  • separator — الفاصل بين العناصر (افتراضياً مسافة).
  • \n
  • terminator — ما يوضع في نهاية السطر (افتراضياً \\n — سطر جديد).
  • \n
\n\n
print(1, 2, 3, separator: "-", terminator: "!")\n// الإخراج: 1-2-3!
\n\n

متى تستخدم: للإخراج العادي للبيانات، وتسجيل الدخول في التطبيقات البسيطة، والأمثلة التعليمية.

\n\n
\n\n

println() — ضيف من الماضي

\n\n

إذا صادفت println() في أي كود قديم، فاعلم أنها مشابهة لـ print() من الإصدارات الأولى لـ Swift. الفرق الوحيد: println() كانت دائماً تضيف حرف السطر الجديد في النهاية، ولم يكن لديها معامل terminator.

\n\n
// كود قديم في Swift 1.x\nlet x = 10\nprintln("قيمة x = \\(x)")\n// الإخراج: قيمة x = 10 (مع سطر جديد)
\n\n

في الإصدارات الحديثة من Swift (بدءاً من 2.0)، لم تعد println() موجودة. إذا حاولت استخدامها، ستحصل على خطأ في الترجمة. فقط استبدلها بـ print() — وسيعمل كل شيء.

المدونات

توصيات الكتب