سرستونها به snake_case
هر سرستون را در یک خط بگذارید و snake_case را انتخاب کنید. هر خط جداگانه تبدیل میشود، بنابراین First Name به first_name و Customer ID به customer_id تبدیل میشود. فاصلهها و علائم نگارشی جداکنندهاند و ناپدید میشوند، یک حرف بزرگ در میانهٔ واژه بخش تازهای را آغاز میکند و همه چیز با حروف کوچک درمیآید، همان چیزی که PEP ۸ و بیشتر سبکنامههای SQL میخواهند.
خطبهخط
| ۱ | First Name | first_name |
| ۲ | Last Name | last_name |
| ۳ | Email Address | email_address |
| ۴ | Date of Birth | date_of_birth |
| ۵ | Customer ID | customer_id |
یک سرستون در هر خط یعنی یک برگهٔ بیستستونی در یک نوبت تبدیل میشود و جدول خطبهخطِ زیر آن، هر نام جدید را با نامی که از آن آمده جفت میکند.
سرواژهها اینجا کوچک میشوند، نه حفظ: Customer ID به customer_id تبدیل میشود، چون نام snake_case با حروف بزرگ در میانش نه snake_case است و نه خوانا.
هر چیزی که حرف یا رقم نباشد جداکننده به حساب میآید، بنابراین سرستونی که «Order # (net)» نوشته شده بهجای گذر دادن علائم نگارشی، بهصورت order_net درمیآید.
چگونگی کار
مراحل انجام کار
- پایان خطوط ویندوز و مک کلاسیک را به یک خطنوی واحد تبدیل کنید، سپس متن را به خطوط تقسیم کنید. هر خط جداگانه تبدیل میشود، بنابراین فهرستی از عنوانها یا نام ستونها در یک نوبت انجام میشود.
- تشخیص دهید که آیا خط «فریادی» است یا نه، یعنی حروف بزرگ دارد و هیچ حرف کوچکی ندارد. در چنین خطی گزینهٔ دستنخورده گذاشتن واژههای تمامبزرگ نادیده گرفته میشود، چون در آنجا هیچ چیز یک واژه را بهعنوان سرواژه متمایز نمیکند.
- برای حروف بزرگ و کوچک، نگاشتهای پیشفرض یونیکد را روی کل خط اعمال کنید و همینجا متوقف شوید. این نگاشتها مستقل از زبان محلیاند، بنابراین ß آلمانی به SS تبدیل میشود و پاسخ روی هر دستگاهی یکسان است.
- برای حالت عنوان، واژهها را پیدا کنید — رشتههایی از حرف و رقم که ممکن است در میانشان آپاستروف باشد. خط تیره بخشی از واژه نیست، بنابراین هر جزء یک ترکیب خطتیرهدار جداگانه داوری میشود.
- واژهٔ اول، واژهٔ آخر و اولین واژه پس از دونقطه را بزرگ کنید. هر واژهٔ دیگری را که در فهرست سبک انتخابشده است کوچک کنید. باقی را بزرگ کنید. واژهای که بلافاصله پس از خط تیره میآید از قاعدهٔ اولوآخر معاف است.
- برای حالت جمله، همهٔ واژهها را کوچک کنید، ضمیر I را برگردانید، سپس حرف اول هر جمله را بزرگ کنید. مرزهای جمله از قطعهبند یونیکد مرورگر میآیند که روی نسخهای از خط با حروف یکسانشده اجرا میشود.
- هرگاه جملهای به یک حرف تنها یا به یکی از بیست اختصار فهرستشده ختم شود، آن را به جملهٔ بعدی بچسبانید، تا نقطهٔ بعد از «e.g.» یا «Mr.» حرف بزرگ سرگردانی تولید نکند.
- برای camelCase، snake_case و kebab-case همان واژهها را بردارید، آپاستروفهایشان را حذف کنید و هر کدام را در نقطهٔ تغییر بزرگی حروف بشکنید — یک حرف کوچک یا رقم که پس از آن حرف بزرگ میآید، و رشتهای از حروف بزرگ که پس از آن حرف کوچک میآید.
- اجزا را به هم بچسبانید. برای snake و kebab سراسر حروف کوچک؛ برای camel، جزء اول کوچک و هر جزء بعدی با حرف بزرگ.
فرضها
- هر خط جداگانه تبدیل میشود. واژهٔ اول و آخر یک عنوان، واژهٔ اول و آخر همان خط است، هیچ جملهای از شکست خط عبور نمیکند و بیست سرستون در بیست خط، بیست شناسه میشوند نه یک شناسهٔ بلند.
- حالت عنوان یک فهرست واژه است، نه یک دستور زبان. شیکاگو حروف اضافه را با جستوجو در فهرست کوچک میکند، بنابراین حرف اضافهای که نقش قید دارد در جایی که شیکاگو بزرگش میکند کوچک میشود — «Look up the Answer» بهجای «Look Up the Answer». درست کردن این مورد به یک برچسبزن اجزای کلام نیاز دارد که چیزی بسیار بزرگتر و بسیار کمتر پیشبینیپذیر از یک فهرست است.
- واژهٔ اول و آخر یک خط، همراه با اولین واژه پس از دونقطه، همیشه بزرگ میشوند. واژهای که بلافاصله پس از خط تیره میآید از این قاعده معاف است، و همین است که «Run-in with the Law» را بهجای «Run-In with the Law» تولید میکند.
- در خطی که سراسر حروف بزرگ است، دستنخورده گذاشتن واژههای تمامبزرگ نادیده گرفته میشود. سرواژه یعنی واژهای با حروف بزرگ میان واژههایی که بزرگ نیستند، و یک خط فریادی چنین تضادی ندارد؛ بنابراین رعایت این گزینه در آنجا، یک اشتباه caps-lock را به خودش تبدیل میکرد.
- حالت جمله نمیتواند اسم خاص را بازگرداند. هیچ چیز در «we met in paris» نمیگوید Paris یک شهر است، بنابراین کوچک برمیگردد. ضمیر I تنها استثناست، چون به شکلی که یک نام نیست، بیابهام است.
- حالت عنوان و حالت جمله باقی هر واژه را کوچک میکنند، بنابراین واژهای که عمداً حروف مخلوط دارد صاف میشود — «parseHTMLDoc» به «Parsehtmldoc» تبدیل میشود. camelCase، snake_case و kebab-case تبدیلهایی هستند که یک شناسهٔ موجود را میفهمند.
- سرواژهها در camelCase، snake_case و kebab-case، صرفنظر از گزینه، کوچک میشوند. «Customer ID» به customer_id تبدیل میشود، چون نام snake_case با حروف بزرگ نه snake_case است و نه خواناتر.
- حروف بزرگ و کوچک از نگاشتهای پیشفرض یونیکد بدون زبان محلی استفاده میکنند. ß آلمانی به SS تبدیل میشود که درست است، و به ß برنمیگردد، یعنی این تغییر برگشتپذیر نیست. i بینقطهٔ ترکی با قواعد پیشفرض تبدیل میشود، نه با قواعد ترکی.
- واژهای که با رقم شروع میشود همانطور که هست میماند، چون رقم آغازین حرف پس از خود را بزرگ نمیکند و شمارهٔ ترتیبی انگلیسی با حروف کوچکش میماند.
- نویسهها بهصورت خوشههای نویسهای (grapheme) شمرده میشوند. یک حرف آکساندار که با دو نقطهٔ کد نوشته شده، یا ایموجیای با اصلاحگر رنگ پوست که با چهار نقطهٔ کد نوشته شده، یکی شمرده میشود.
پرسشهای رایج
فاصلهها و علائم نگارشی در سرستون چه میشوند؟
فاصلهها و علائم نگارشی به یک زیرخط تبدیل میشوند و رشتههای پیاپی آنها بهجای تکرار، در هم ادغام میشوند. `Total Sales (USD)` میشود `total_sales_usd`. زیرخطهای ابتدا و انتها حذف میشوند، چون ستونی به نام `_total_` تقریباً هرگز منظور کسی نیست.
آیا سرستونی که با عدد شروع میشود بهعنوان نام ستون کار میکند؟
این ابزار آن را دستنخورده میگذارد و بیشتر پایگاههای داده آن را نمیپذیرند. Postgres، SQLite و pandas نامی را که با رقم آغاز میشود فقط در صورت نقلقول شدن میپذیرند، بنابراین پیش از استفاده بهعنوان شناسه، یک حرف در ابتدای آن بگذارید. چیزی بهجای شما اضافه نمیشود، چون قرارداد واحدی برای حدس زدن وجود ندارد.
منابع
روش کامل، مثال محاسبهشده و همهٔ فرضهای این نتیجه در این صفحه آمده است: مبدل حالت حروف.