السلاسل متعددة الأسطر في Rust: الصياغة والأمثلة والأسرار

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

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

ابدأ الدورة

السلاسل متعددة الأسطر في Rust: كيف لا تفقد صوابك بسبب علامات الاقتباس والشرطات المائلة

\n\n

مرحبًا يا صديقي! إذا كنت قد كتبت يومًا بلغة Python، فأنت تعلم أن إنشاء سلسلة متعددة الأسطر هناك أسهل من أي شيء آخر: ثلاث علامات اقتباس """...""" وستنتهي المهمة. ولكن بمجرد أن تنتقل إلى Rust، ستدرك فجأة أن الحيلة المألوفة لا تعمل. وهكذا تجد نفسك تبحث في Google: «What is the syntax for a multiline string literal?». هل هذا مألوف لك؟

\n\n

لا تقلق، هذا هو السؤال الأكثر شيوعًا بين المبتدئين في Rust، والذي حصل على آلاف المشاهدات على Stack Overflow. واليوم سنفهم مرة واحدة وإلى الأبد كيفية العمل مع السلاسل الطويلة في Rust دون أن نعقد أنفسنا. هيا بنا!

\n\n

لماذا لا تحب Rust علامات الاقتباس الثلاثية (مثل Python)؟

\n\n

Rust هي لغة نظامية وصارمة. لا تتساهل مع الحريات. علامات الاقتباس الثلاثية """ في Rust ليست صياغة للسلاسل متعددة الأسطر، بل هي بداية تعليق أو توثيق (إذا كانت ///). لذا إذا حاولت كتابة:

\n\n
// ❌ هذا لا يعمل!\nlet text = """هذا\nمتعدد الأسطر\nسلسلة""";\n
\n\n

سينظر إليك المترجم بتوبيخ وسيظهر خطأ. في Rust، يتم استخدام نهج مختلف للسلاسل متعددة الأسطر - وهو أفضل من Python!

\n\n

الطريقة رقم 1: علامات الاقتباس العادية وفاصل الأسطر

\n\n

أبسط طريقة هي ببساطة كسر السطر في الكود باستخدام الرمز \\n داخل السلسلة. لكن هذا ممل وغير قابل للقراءة. الأكثر إثارة للاهتمام هو استخدام فاصل الأسطر الفعلي داخل علامات الاقتباس المزدوجة. Rust تسمح بذلك!

\n\n
// ✅ يعمل!\nlet poem = "هذا مثال لسلسلة،\nتمتد على سطرين،\nوهذا قانوني تمامًا في Rust.";\nprintln!("{}", poem);\n
\n\n

سيحتوي الإخراج على أحرف فاصل الأسطر حيثما وضعتها في الكود. ولكن هناك فارق بسيط: إذا كنت تريد الحفاظ على المسافات البادئة (المسافات في بداية الأسطر)، فسيتم تضمينها أيضًا في السلسلة. أحيانًا يكون هذا مفيدًا، وأحيانًا لا.

\n\n

الطريقة رقم 2: الهروب والشرطة المائلة العكسية - صديقك (وعدوك)

\n\n

إذا كنت بحاجة إلى كتابة سلسلة طويلة في الكود، ولكن بدون إضافة فواصل أسطر إليها (على سبيل المثال، من أجل قابلية القراءة)، استخدم الشرطة المائلة العكسية في نهاية السطر:

\n\n
// ✅ سلسلة بدون فواصل أسطر، ولكنها قابلة للقراءة في الكود\nlet long_string = "هذه سلسلة طويلة جدًا، \\\nمقسمة على عدة أسطر في الكود، \\\nولكنها ستكون سطرًا واحدًا في الذاكرة بدون \\n.";\nprintln!("{}", long_string);\n
\n\n

لاحظ: بعد الشرطة المائلة العكسية يجب ألا تكون هناك مسافات - اضغط على Enter فورًا. وإلا سيعتقد Rust أنك تهرب مسافة، وسينهار كل شيء.

\n\n

الطريقة رقم 3: القيم الحرفية للسلاسل الخام - السحر بدون هروب

\n\n

وهذا هو السلاح السري لـ Rust. إذا كنت بحاجة إلى كتابة سلسلة تحتوي على العديد من علامات الاقتباس أو الشرطات المائلة أو أحرف خاصة أخرى (مثل JSON أو تعبير عادي أو مسار Windows)، استخدم r"" - القيم الحرفية للسلاسل الخام.

\n\n

داخل r"..."، يتم التعامل مع جميع الأحرف حرفيًا. لا هروب على الإطلاق!

\n\n
// ✅ سلسلة خام - لا شرطات مائلة!\nlet json = r#"{\n    "name": "Rust",\n    "version": 1.75,\n    "features": ["أمان", "سرعة"]\n}"#;\nprintln!("{}", json);\n
\n\n

ولكن ماذا لو ظهر "# داخل السلسلة؟ لهذا، تسمح Rust بزيادة عدد # حول علامات الاقتباس: r##"..."##، r###"..."### وهكذا إلى ما لا نهاية. فقط اختر عددًا من علامات التجزئة التي لا تظهر داخل السلسلة.

\n\n
// ✅ سلسلة خام مع هروب علامات التجزئة\nlet tricky = r###"سلسلة تحتوي على "علامات اقتباس" وحتى "#" بالداخل!"###;\nprintln!("{}", tricky);\n
\n\n

الطريقة رقم 4: السلاسل الخام متعددة الأسطر - أداة متكاملة للبيانات المعقدة

\n\n

والآن دعنا نجمع كل شيء معًا. إذا كنت بحاجة إلى كتابة كتلة نصية متعددة الأسطر تحتوي على علامات اقتباس وشرطات مائلة ومسافات بادئة، استخدم r#""# مع فواصل الأسطر مباشرة بالداخل:

المدونات

توصيات الكتب