لماذا لا تستخدم لغات البرمجة الشائعة بعض الطابع الآخر لسلاسل Delimit؟ [مغلق

StackOverflow https://stackoverflow.com/questions/965425

سؤال

كل لغة برمجة أعرفها (بيرل، جافا سكريبت، فب، بيثون، ASP، ActionScript، Commodore Basic) يستخدم ونقلت واحدة ومزدوجة إلى سلاسل Delimit.

هذا يخلق الوضع المستمر من الاضطرار إلى الذهاب إلى أطوال كبيرة لعلاج الاقتباسات بشكل صحيح، نظرا لأن الاقتباس شائع للغاية في محتويات السلاسل.

لماذا لا تستخدم لغات البرمجة بعض الطابع الآخر لتخلص سلاسل, ، واحد غير مستخدم في المحادثة العادية ، | أو { } على سبيل المثال) حتى نتمكن من الحصول على حياتنا فقط؟

هل هذا صحيح، أو أطلني على شيء ما؟ هل هناك طريقة سهلة للتوقف عن استخدام اقتباسات للحصول على سلاسل في لغة برمجة حديثة؟

طباعة <<
وأنا أعلم عن هنا الوثيقة بناء الجملة، ولكن من أجل معالجة سلسلة طفيفة، فإنها تعقيدا بشكل مفرط وتسحق التنسيق.
نهاية؛

تحديث قدم الكثير منكم نقطة جيدة حول أهمية استخدام أحرف ASCII فقط. لقد قمت بتحديث الأمثلة لتعكس ذلك ( خطأ في الخلفية, ، ال يضخ و الأقواس).

هل كانت مفيدة؟

المحلول

Python لديه نوع سلسلة إضافية، باستخدام اقتباسات ثلاثية مزدوجة،

"""like this"""

بالإضافة إلى ذلك، يسمح لك بيرل باستخدام أي محدد تريد،

q^ like this ^

أعتقد بالنسبة للجزء الأكبر، يتم استخدام محددات السلسلة العادية لأنها منطقية. ملفوفة ملفوفة في اقتباسات. بالإضافة إلى ذلك، يتم استخدام معظم المطورين لاستخدام منطقهم المشترك عندما يتعلق الأمر بالسلاسل التي تتغير بشكل كبير الطريقة التي يتم تقديمها، يمكن أن تكون منحنى التعلم الصعب.

نصائح أخرى

PERL يتيح لك استخدام مهما كانت الشخصيات التي تحبها

 "foo $bar" eq
 qq(foo $bar) eq
 qq[foo $bar] eq
 qq!foo $bar! eq
 qq#foo $bar# etc

Meanwhile
 'foo $bar' eq
 q(foo $bar) eq
 q[foo $bar] eq
 q!foo $bar! eq
 q#foo $bar# etc

يمتد بناء الجملة إلى ميزات أخرى، بما في ذلك التعبيرات العادية، وهو مفيد إذا كنت تتعامل مع URIS.

 "http://www.example.com/foo/bar/baz/" =~ /\/foo/[^\/]+\/baz\//;
 "http://www.example.com/foo/bar/baz/" =~ m!/foo/[^/]+/baz/!;

الحالية: "آلة كاتبة" علامات "اقتباس"

هناك العديد من الأسباب الجيدة لاستخدام علامات الاقتباس التي نستخدمها حاليا:

  • يتم العثور بسهولة على الاقتباسات على لوحات المفاتيح - لذلك فهي سهلة الكتابة، وعليهم أن تكون سهلة، لأن السلاسل ضرورية في كثير من الأحيان.

  • ونقلت في ASCII - معظم أدوات البرمجة تعامل فقط مع ASCII جيدا. يمكنك استخدام ASCII في أي بيئة تقريبا يمكن تخيلها. وهذا مهم عندما تقوم بإصلاح برنامجك عبر اتصال Telnet في بعض الخادم البعيد البعيد.

  • ونقلت تأتي في العديد من الإصدارات - اقتباسات واحدة، ونقلت مزدوجة، ونقلت الظهر. لذلك يمكن للغة تعيين معاني مختلفة للأسلوتات المعتبد بشكل مختلف. يمكن أن تحل هذه الأسعار المختلفة أيضا مشكلة "علامات الاقتباس" داخل "علامات اقتباس".

  • ونقلت طبيعية - اقتباسات اللغة الإنجليزية المستخدمة لوضع علامة على مراكز النص قبل فترة طويلة قبل اتباع لغات البرمجة. يتم استخدام اقتباسات اللغويات بنفس الطريقة كما في لغات البرمجة. ونقلت طبيعية بنفس الطريقة + و - أنها طبيعية للإضافة والترقعية.

بديل: "مطبوخ" صحيح "

من الناحية الفنية هم متفوقون. ميزة واحدة كبيرة هي أنه يمكنك تجنبها بسهولة بين الاقتباسات الافتتاحية والإغلاق. لكنهم من الصعب اكتب وهم ليسوا في ASCII. (اضطررت إلى وضعها في عنوان لجعلها مرئية في خط Stackoverflow على الإطلاق.)

نأمل في يوم من الأيام عندما يكون ASCII شيء يهتم به المؤرخون وحبلات المفاتيح فقط في شيء مختلف تماما (إذا كنا سنوجه إلى لوحات مفاتيح على الإطلاق)، فسيؤدي هناك لغة برمجة تستخدم اقتباسات أفضل ...

يحتوي Python على محدد سلسلة بديلة مع الاقتباس الثلاثي "" "" "بعض السلسلة" "".

يتم استخدام علامات اقتباس واحدة ونقلت مزدوجة في غالبية اللغات لأن هذا هو الحلمين القياسي في معظم اللغات المكتوبة.

تحاول اللغات (يجب) أن تكون بسيطة لفهم قدر الإمكان، واستخدام شيء مختلف عن اقتباسات التعامل مع السلاسل يقدم التعقيد غير الضروري.

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

ه: لقد فاتني شخصية الأنابيب، والتي قد تكون في الواقع بديل قابل للتطبيق. إلا أن الأمر يستخدم حاليا على نطاق واسع مثل المشغل، وقضية قابلية القراءة لا تزال تقف.

لأن تلك الشخصيات الأخرى التي تدرجها ليست ASCII. لست متأكدا من أننا على استعداد، أو تحتاج إلى لغة برمجة في Unicode ...

تحرير: لماذا لا تستخدم {}، | أو ، حسنا هؤلاء الرموز جميعهم لديهم بالفعل معاني في معظم اللغات. تخيل ج أو بيرل مع معاني مختلفة ل '{' و ''!

| يعني أو، وفي بعض اللغات سلاسل سلاسل بالفعل. وكيف تحصل n إذا كان كان محدد؟

في الأساس، أنا حقا لا أرى لماذا هذه مشكلة. هو "حقا الصعب؟ أقصد، في C، غالبا ما يتعين عليك استخدام ٪، و والعديد من أحرف حرفين أخرى ... مي.

نظرا لأن أي شخص قد أنشأ لغة باستخدام بعض الأحرف الأخرى التي حصلت على شعبية.

أعتقد أن هذا إلى حد كبير لأن الطلب على تغيير الشخصية ليس فقط ليس هناك، يتم استخدام معظم المبرمجين على الاقتباس القياسي ومعرفة أي سبب مقنع لتغيير الوضع الراهن.

قارن بين ما يلي.

print "This is a simple string."
print "This \"is not\" a simple string."

print ¤This is a simple string.¤
print ¤This "is not" a simple string.¤

أنا لأحد لا أشعر حقا أن الثاني هو أسهل أو أكثر قابلية للقراءة.

آه، لذلك تريد فورتران القديم، حيث كنت تقتبس من خلال حساب عدد الأحرف في السلسلة وتضمينها بتنسيق H، مثل: 13HHello, World!. وبعد كما قام شخص ما ببعض الأشياء مع FORTRAN مرة أخرى في الأيام التي كان فيها اسم اللغة كل قبعات، علامات الاقتباس والهروب منهم شيء جيد. (على سبيل المثال، أنت غير مشدود تماما إذا كنت خارج واحد في عدد الأحرف اليدوية الخاصة بك.)

على محمل الجد، لا يوجد حل مثالي. سيكون الأمر ضروريا دائما، في مرحلة ما، للحصول على سلسلة تحتوي على حرف اقتباس الذي تريده. لأغراض عملية، يجب أن تكون محاسيمو المشويات على لوحة المفاتيح ويمكن الوصول إليها بسهولة، لأنها تستخدم بشدة. بيرل q@...@ ستفشل بناء الجملة إذا كانت السلسلة تحتوي على مثال على كل حرف ممكن. ثوابت هولريث فورتران أسوأ.

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

ربما يكون أحد الأسباب الجيدة أنه إذا كان هذا هو الشيء الوحيد الذي تريد تحسينه على لغة موجودة، فأنت لا تخلق لغة جديدة حقا.

وإذا كنت تقوم بإنشاء لغة جديدة، فإن اختيار الحرف المناسب لنقل الأسعار ربما يكون الطريق وسيلة إلى أسفل على قائمة الأشياء التي يجب تنفيذها فعليا.

من المحتمل أنك ستكون أفضل قبالة اختيار محدد موجود على جميع لوحات المفاتيح المشتركة ومجموعات التمثيل المحيطي، لذلك معظم تلك التي تقترحها مباشرة ...

وعلى أي حال، ستظل آلية اقتباس ضرورية ... تكتسب انخفاضا في عدد المرات التي تستخدمها نقلا عن تكلفة جعل اللغة أكثر صعوبة لقراءة غير متخصص.

لذلك ليس من الواضح تماما أن هذا فوز، ثم هناك قوة عادة.

لا يستخدم ADA اقتباسات واحدة للأسلحة. تلك هي فقط للأحرف، ولا يجب أن تضغط من داخل السلاسل.

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

وأود أن أتصور السبب الرئيسي لا يتم استخدام أي من تلك الشخصيات الأخرى لمحددات السلسلة هو أنها ليست في جدول رمز ASCII الأصلي 7 بت. ربما هذا ليس عذرا جيدا في هذه الأيام، ولكن في عالم يخاف معظم المصممين اللغوي من بناء جملة Crappy C Crappy C، لن تحصل على الكثير من المحتجزين للحصول على اختيار محدد سلسلة غير عادي.

يسمح لك Python بمزج اقتباسات واحدة ومثيرة لوضع علامات اقتباس في السلاسل.

print "Please welcome Mr Jim 'Beaner' Wilson."
>>> Please welcome Mr Jim 'Beaner' Wilson.

print 'Please welcome Mr Jim "Beaner" Wilson.'
>>> Please welcome Mr Jim "Beaner" Wilson

يمكنك أيضا استخدام الاقتباسات الثلاثية المذكورة سابقا. تمتد هذه أيضا عبر خطوط متعددة للسماح لك بالحاجة إلى الاضطرار إلى طباعة خطوط نيو هناك.

print """Please welcome Mr Jim "Beaner" Wilson."""
>>> Please welcome Mr Jim "Beaner" Wilson

أخيرا، يمكنك طباعة الأوتار بنفس الطريقة مثل أي شخص آخر.

print "Please welcome Mr Jim \"Beaner\" Wilson."
>>> Please welcome Mr Jim "Beaner" Wilson
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top