FreeToGenerate.com

مكتبتان شائعتان تختلفان في 1.38٪ من المعرِّفات الحقيقية، وكل اختلافٍ منها سببه رقم.

تبيّن أنه
PascalCase
مقسومٌ إلى
3 · xml http request
  • camelCasexmlHttpRequest
  • PascalCase ·XmlHttpRequest
  • snake_casexml_http_request
  • kebab-casexml-http-request
  • SCREAMING_SNAKE_CASEXML_HTTP_REQUEST
  • Train-CaseXml-Http-Request
  • dot.casexml.http.request

هذا التحويل يُفقد معلومات

الحرفان الكبيران المتتاليان فصاعدًا اختصار، ولا يردّه أي تحويل. فمتى صُيّرت صغيرةً لم يبقَ ما يسجّل أيّها كان كبيرًا.

إذا حُوّل ثم رُدّ صار XmlHttpRequest

متوفر أيضًا بلغات أخرى: English · Español · Português · Français

محوّل نمط أسماء المعرِّفات

camelCase وPascalCase وsnake_case وkebab-case وسائرها: تُكشَف وتُحوَّل، مع صدقٍ في بيان ما يهدمه التحويل.

ما نمط اسم المعرِّف؟

نمطُ اسم المعرِّف هو العرف الذي يصل به المبرمج عدة كلماتٍ في اسمٍ واحد. فجافاسكربت وجافا تؤثران camelCase، وبايثون وراست تستعملان snake_case، وأصنافُ CSS والروابط تستعمل kebab-case، وأسماءُ الأنواع تكون غالبًا PascalCase، والثوابتُ عرفًا SCREAMING_SNAKE_CASE. وكلها تُرمّز الكلمات نفسها، وإنما يختلف الوصل.

وهذه الصفحة تكشف في أي عرفٍ الاسمُ أصلًا، وتحوّله إلى سائر الأعراف، وتخبرك بما لا يكاد يخبرك به محوّل: أيُفقد التحويل معلومةً لن تستطيع ردّها.

وهي نظيرةُ محوّل الحالة في هذا الموقع من جهة المبرمجين، وذاك يعالج النثر: أول الجملة، وحالةَ العناوين، وقواعدَ الحروف الكبيرة في اللغة. وليس هنا شيءٌ من النحو.

كيف تستعمله؟

  1. ألصق أو اكتب أي معرِّف. فهو يعرف camelCase وPascalCase وsnake_case وkebab-case وSCREAMING_SNAKE_CASE وTrain-Case وdot.case. وما لا يوافق واحدًا منها يُعلَن غير معروفٍ بدل حشره في أقربها.
  2. انظر إلى قسمة الكلمات. فكل تحويلٍ خطوتان لا غير: قسمُ الاسم كلماتٍ ثم وصلُها على وجهٍ آخر. فقائمةُ الكلمات تقول لك بالضبط ما تظنّ الأداة أن اسمك يقوله. فإن أخطأت القسمة أخطأت كل التحويلات تحتها.
  3. انسخ الصورة التي تحتاجها. فلكل سطرٍ زر نسخه، والسطرُ الموافق لِما كتبت معلَّم. وتحتها ملاحظةٌ تقول أيَرُدّ التحويلُ ذهابًا وإيابًا الاسمَ الذي بدأت به.

مكتبتان وجوابان، والسبب الأرقام

قبل كتابة هذا أخذنا مكتبتين شائعتين لتحويل الأنماط — إحداهما مخصّصة للأنماط، والأخرى دوالُّ الأنماط في مكتبة أدواتٍ عامة — وأجريناهما على كل معرِّفات camelCase وPascalCase المعلنة في شفرة هذا الموقع، وهي 5159 اسمًا. فاختلفتا في واحدٍ وسبعين منها، أي نحو 1.38٪.

وكل اختلافٍ منها بلا استثناءٍ سببه رقم. فإحدى المكتبتين تُبقي الرقم ملتصقًا بالحروف قبله، فيصير Base64Tool هو base64_tool؛ والأخرى تعدّ الرقم كلمةً مستقلة فتخرج base_64_tool. وكذلك في utf8Bytes وrot13 وmulberry32 وbyAlpha2. وقد صنّفنا الواحد والسبعين كلها فكانت البقية صفرًا: فلم يكن وراء السبب الأول سببٌ ثانٍ مختبئ.

وليست إحداهما مخطئة. فليس لهذا معيار، والقراءتان تقابلان تصورين وجيهين للرقم: أهو جزءٌ من كلمةٍ كالأربعة والستين في Base64، أم رمزٌ مستقل كرقم إصدار. وهذه الأداة تُبقي الأرقام ملتصقة، فـBase64 كلمةٌ واحدة، ويحسن أن تعلم أن أداة زميلك قد لا تفعل مثلها.

والأثرُ العملي صغيرٌ حادّ: فإن ولّدت اسم عمودٍ من اسم صنفٍ بأداة، ثم استعلمت عن ذلك العمود من شفرةٍ تستعمل أداةً أخرى، لم يتطابق base64_tool وbase_64_tool، ولم يخبرك شيءٌ لماذا.

ماذا يهدم التحويل، وكم مرةً يقع ذلك

العطبُ المشهور هو الاختصارات. فـXMLHttpRequest يتحول إلى xml_http_request، وبالعودة يخرج XmlHttpRequest: فالحروف الكبيرة الثلاثة ذهبت، وليس في صورة snake_case ما يسجّل أنها كانت هناك. وكذلك يقع لـparseURL وIOError وAPIKey. وليس هذا عيبًا في مكتبةٍ بعينها: فالمعلومة غائبةٌ حقًّا عن الصورة الوسطى.

والذي يستحق الإضافة، إذ لا يكاد أحدٌ يضيفه، هو كم مرةً يعضّ ذلك فعلًا. فعلى تلك المعرِّفات الـ5159 نفسها لم يكن فيها إلا أربعةٌ تحمل حرفين كبيرين متتاليين فأكثر — أي دون عُشر نقطةٍ مئوية — ونجت الأربعة كلها من الذهاب والإياب. ففي هذه الشفرة لم تقع الحالةُ المُفقِدة مرةً واحدة.

وهذا متنٌ واحد، ومتنُ TypeScript، حيث أسماءٌ مثل getElementById هي المعتاد. أما شفرةُ جافا أو سي شارب المملوءة بـHTTPSConnection وXMLParser فتخرج مخالفةً جدًّا، ولا ندّعي خلاف ذلك. غير أن الشائع مقلوب: إذ يوصف التحويل بقلة الوثوق، والصوابُ أنه يُفقد معلومةً في حالةٍ بعينها معلومةٍ يمكن تمييزها، وهي نادرةٌ في التسمية الحديثة.

وثمة نصفٌ ثانٍ يحسن علمه. فمتى صار الاسم snake_case فهو مستقر: إعادةُ تحويله لا تغيّر شيئًا، وcamelCase الخارج منه واحدٌ مهما دُرت. فالفقدُ يقع مرةً واحدة في الذهاب ثم لا يقع أبدًا. والقاعدةُ إذن يسيرة: حوِّل عن أصلك ما شئت، ولا تعدّ اسمًا محوَّلًا مصدرًا تستردّ منه.

حدودٌ صادقة

قسمةُ الكلمات هي المحرّك كله، وفيها قراران تعلنهما هذه الصفحة ولا تخفيهما. فالأرقام تبقى ملتصقةً بالحروف قبلها. وتتابعُ حروفٍ كبيرة يتبعه كلمةٌ مبدوءة بكبير يُقسَم قبل آخر حرفٍ كبير، فيعطي HTTPServer الكلمتين http وserver بدل أن يتشظّى حروفًا مفردة، وهو ما كانت الأداة تفعله لولا تلك القاعدة، وهو أحد حالات التخريب في بطارية الاختبار.

والكشفُ صارمٌ عن عمد. فشيءٌ مثل mixed_Snake-kebab لا يوافق عرفًا، فيُبلَّغ عنه بأنه غير معروف بدل نسبته إلى أقربها. والكاشفُ الذي يخمّن دائمًا يبدو أقدر ويخبرك أقل.

وثمة التباسٌ حقيقي لا جواب صحيح له. فالكلمة الواحدة بحروفٍ صغيرة — total أو name أو value — هي في آنٍ camelCase صحيحة وsnake_case صحيحة من كلمةٍ واحدة. والأداةُ تسميها camelCase، لأنها القراءة الأشيع في المعرِّفات، لكنه عرفٌ لا حقيقة.

وأخيرًا فهذا يعالج المعرِّفات بحروف ASCII. فأكثر اللغات البرمجية تسمح بحروفٍ خارج A–Z في الأسماء، وقواعدُ تتابع الحروف الكبيرة هنا مكتوبةٌ للأبجدية اللاتينية. فالاسمُ باليونانية أو السيريلية يُقسَم على الفواصل لا على تغيّر الحالة.

لماذا هي مجانية؟

لأنها تعبيرٌ نمطي ووصلُ نصوص. فكل شيءٍ يجري في متصفحك، ولا يُرفع شيءٌ مما تكتبه، وليس ثمة خادمٌ في تغيير اسم متغيّر.

فلا حساب ولا تسجيل ولا شيء محجوب. والمحرّك وبطاريةُ اختباره في المستودع إلى جوار الصفحة، والاختباراتُ تقابل دعاواها بأكثر من خمسة آلاف معرِّفٍ من الموقع نفسه لا بأمثلةٍ مخترعة: وهي عين الجماعة التي خرجت منها الأرقام أعلاه، فلا يمكن أن يفترق المقال والاختبارات.