السلاسل متعددة الأسطر في Rust: كيف لا تفقد صوابك بسبب علامات الاقتباس والشرطات المائلة
\n\nمرحبًا يا صديقي! إذا كنت قد كتبت يومًا بلغة Python، فأنت تعلم أن إنشاء سلسلة متعددة الأسطر هناك أسهل من أي شيء آخر: ثلاث علامات اقتباس """...""" وستنتهي المهمة. ولكن بمجرد أن تنتقل إلى Rust، ستدرك فجأة أن الحيلة المألوفة لا تعمل. وهكذا تجد نفسك تبحث في Google: «What is the syntax for a multiline string literal?». هل هذا مألوف لك؟
لا تقلق، هذا هو السؤال الأكثر شيوعًا بين المبتدئين في Rust، والذي حصل على آلاف المشاهدات على Stack Overflow. واليوم سنفهم مرة واحدة وإلى الأبد كيفية العمل مع السلاسل الطويلة في Rust دون أن نعقد أنفسنا. هيا بنا!
\n\nلماذا لا تحب Rust علامات الاقتباس الثلاثية (مثل Python)؟
\n\nRust هي لغة نظامية وصارمة. لا تتساهل مع الحريات. علامات الاقتباس الثلاثية """ في Rust ليست صياغة للسلاسل متعددة الأسطر، بل هي بداية تعليق أو توثيق (إذا كانت ///). لذا إذا حاولت كتابة:
// ❌ هذا لا يعمل!\nlet text = """هذا\nمتعدد الأسطر\nسلسلة""";\n\n\nسينظر إليك المترجم بتوبيخ وسيظهر خطأ. في Rust، يتم استخدام نهج مختلف للسلاسل متعددة الأسطر - وهو أفضل من Python!
\n\nالطريقة رقم 1: علامات الاقتباس العادية وفاصل الأسطر
\n\nأبسط طريقة هي ببساطة كسر السطر في الكود باستخدام الرمز \\n داخل السلسلة. لكن هذا ممل وغير قابل للقراءة. الأكثر إثارة للاهتمام هو استخدام فاصل الأسطر الفعلي داخل علامات الاقتباس المزدوجة. Rust تسمح بذلك!
// ✅ يعمل!\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"" - القيم الحرفية للسلاسل الخام.
داخل r"..."، يتم التعامل مع جميع الأحرف حرفيًا. لا هروب على الإطلاق!
// ✅ سلسلة خام - لا شرطات مائلة!\nlet json = r#"{\n "name": "Rust",\n "version": 1.75,\n "features": ["أمان", "سرعة"]\n}"#;\nprintln!("{}", json);\n\n\nولكن ماذا لو ظهر "# داخل السلسلة؟ لهذا، تسمح Rust بزيادة عدد # حول علامات الاقتباس: r##"..."##، r###"..."### وهكذا إلى ما لا نهاية. فقط اختر عددًا من علامات التجزئة التي لا تظهر داخل السلسلة.
// ✅ سلسلة خام مع هروب علامات التجزئة\nlet tricky = r###"سلسلة تحتوي على "علامات اقتباس" وحتى "#" بالداخل!"###;\nprintln!("{}", tricky);\n\n\nالطريقة رقم 4: السلاسل الخام متعددة الأسطر - أداة متكاملة للبيانات المعقدة
\n\nوالآن دعنا نجمع كل شيء معًا. إذا كنت بحاجة إلى كتابة كتلة نصية متعددة الأسطر تحتوي على علامات اقتباس وشرطات مائلة ومسافات بادئة، استخدم r#""# مع فواصل الأسطر مباشرة بالداخل: