Konverter huruf besar-kecil
Konversi teks antara camelCase, snake_case, kebab-case, Title Case, dan lainnya, dengan huruf sesuai bahasa dan alat baris.
Bentuk penulisan
- UPPERCASE
XMLHTTPREQUEST HANDLER FOR ISTANBUL CITY GUIDE - lowercase
xmlhttprequest handler for istanbul city guide - Title Case
Xmlhttprequest Handler For Istanbul City Guide - Sentence case
Xmlhttprequest handler for istanbul city guide - camelCase
xmlHttpRequestHandlerForIstanbulCityGuide - PascalCase
XmlHttpRequestHandlerForIstanbulCityGuide - snake_case
xml_http_request_handler_for_istanbul_city_guide - kebab-case
xml-http-request-handler-for-istanbul-city-guide - CONSTANT_CASE
XML_HTTP_REQUEST_HANDLER_FOR_ISTANBUL_CITY_GUIDE - dot.case
xml.http.request.handler.for.istanbul.city.guide
Operasi baris
XMLHttpRequest handler for istanbul city guideBaris: 1
Satu pemisahan kata, sepuluh bentuk penulisan
Mengubah huruf besar-kecil sebuah teks tampak seperti hal paling sederhana yang bisa dilakukan sebuah program, dan ia menjadi sumber sejumlah bug nyata yang mengejutkan banyaknya. Sebagian alasannya adalah bahwa «huruf besar-kecil» sebenarnya dua masalah terpisah yang memakai satu nama. Mengubah teks menjadi UPPERCASE atau lowercase adalah pemetaan per karakter yang ditetapkan Unicode. Mengubahnya menjadi camelCase atau snake_case adalah hal yang sama sekali lain: Anda harus terlebih dahulu memutuskan di mana kata-katanya berada, dan barulah setelah itu menyusun ulang dan menyambungnya. Alat ini melakukan keduanya, menampilkan semua hasil sekaligus, dan yang terpenting, memberi tahu jawaban mana yang bergantung pada pengaturan bahasa.
Keenam bentuk pemrogram berasal dari pemisahan kata yang sama, sehingga tidak mungkin saling bertentangan. Inilah batas-batasnya:
- Huruf kecil yang diikuti huruf kapital memulai kata baru, dan itulah yang menjadikan fooBar sebagai foo dan Bar.
- Rangkaian huruf kapital berakhir di tempat kata berikutnya dimulai, yaitu pada kapital terakhir sebelum sebuah huruf kecil. XMLHttpRequest menghasilkan XML, Http, dan Request; IOError menghasilkan IO dan Error.
- Angka yang diikuti huruf kapital memulai kata baru, sehingga html5Parser menghasilkan html5 dan Parser.
- Segala sesuatu yang bukan huruf, angka, atau tanda penggabung memisahkan kata: spasi, garis bawah, tanda hubung, titik, dan tanda baca.
Selebihnya, angka tetap menempel pada kata di depannya, dan itulah sebabnya utf8 serta address2 lolos utuh. Ini adalah perbedaan yang disengaja dari lodash, yang pemisahnya memperlakukan setiap rangkaian angka sebagai kata tersendiri dan mengubah utf8 menjadi utf_8 — konsisten secara teknis, tetapi bukan yang dimaksud siapa pun ketika menamai sebuah variabel.
Pemisahan ini ditulis dengan properti Unicode dan bukan dengan kelas karakter ASCII, sehingga tidak terbatas pada bahasa Inggris. Pengidentifikasi beraksara Kiril terpisah pada batas huruf besar-kecilnya persis seperti pengidentifikasi Latin. Aksara yang sama sekali tidak mengenal huruf besar-kecil — Ibrani, Arab, Tionghoa, Jepang, Korea — tidak memiliki batas semacam itu untuk ditemukan, sehingga katanya hanya dipisahkan oleh pemisah, dan itulah jawaban yang benar, bukan keterbatasan.
Akronim: dua jawaban yang benar
Setelah XMLHttpRequest dipisah menjadi XML, Http, dan Request, menyusunnya kembali sebagai PascalCase memunculkan pertanyaan yang tidak punya satu jawaban benar. Jika setiap kata disusun ulang, hasilnya XmlHttpRequest, yaitu yang dihasilkan lodash dan yang diminta panduan gaya Java dari Google: perlakukan akronim sebagai kata biasa agar batasnya tetap terlihat pada nama seperti ParseXmlDocument. Jika rangkaian kapitalnya dipertahankan, hasilnya XMLHttpRequest, yaitu nama sebenarnya dari API peramban dan konvensi yang diikuti sebagian besar DOM serta banyak bagian .NET.
Keduanya dipakai di basis kode nyata, sehingga alat ini menyediakan keduanya dan secara bawaan menyusun ulang. Opsi ini hanya memengaruhi camelCase dan PascalCase — bentuk lain toh menyusun ulang seluruh kata, jadi XMLHttpRequest tetap menjadi xml_http_request dan XML_HTTP_REQUEST dalam kedua keadaan.
Satu hal bersifat tetap dan tidak dapat dipilih: kata pertama pada nama camelCase selalu dijadikan huruf kecil seluruhnya, bahkan ketika ia sebuah akronim. Mempertahankannya akan menghasilkan PascalCase, dan mempertahankannya setengah akan menghasilkan xMLHttpRequest, bentuk yang tidak direkomendasikan panduan gaya mana pun dan membuat setiap pembaca tersandung. Karena itu XMLHttpRequest menjadi xmlHttpRequest dalam kedua keadaan, sementara parseXMLDocument mempertahankan akronim di tengahnya bila Anda memintanya.
Huruf i Turki, dan mengapa bahasa adalah sebuah pilihan
JavaScript punya dua metode untuk mengubah ke huruf kapital, dan perbedaan di antara keduanya pernah menjatuhkan sistem produksi. Metode toUpperCase menerapkan pemetaan Unicode yang tidak bergantung bahasa: huruf i menjadi I. Metode toLocaleUpperCase menerapkan aturan bahasa tertentu, dan dalam bahasa Turki serta Azerbaijan kapital dari i adalah İ yang bertitik, karena abjad itu juga memiliki ı tanpa titik yang kapitalnya adalah I. Ubah masukan pengguna Turki ke huruf kapital dengan bahasanya sendiri, bandingkan dengan kata kunci protokol, dan perbandingan itu gagal pada karakter yang tampak nyaris sama.
Inilah bug internasionalisasi paling umum dalam pengolahan string, dan ia tidak terlihat sampai menimpa Anda sendiri. Karena itu alat ini tidak pernah menebak. Bawaannya adalah pemetaan yang tidak bergantung bahasa, yaitu yang dibutuhkan pengidentifikasi, token protokol, header HTTP, dan kunci basis data. Memilih sebuah bahasa beralih ke aturan bahasa itu — dan setiap kali pilihan tersebut mengubah hasil, alat ini menampilkan jawaban yang tidak bergantung bahasa di sampingnya, sehingga terlihat persis apa yang dilakukan bahasa itu.
'i'.toUpperCase() // 'I'
'i'.toLocaleUpperCase('tr') // 'İ' dotted capital
'I'.toLocaleLowerCase('tr') // 'ı' dotless lowercase
'ISTANBUL'.toLocaleLowerCase('tr') // 'ıstanbul'Tiga bahasa lain juga mengubah jawaban, dan alat ini menyediakan semuanya. Bahasa Lituania mempertahankan titik di atas i ketika mengecilkan kapital yang membawa aksen lain, sehingga Ì menjadi i yang diikuti titik penggabung dan gravis penggabung, bukan satu ì prakomposisi. Bahasa Yunani menghapus tonos saat membesarkan huruf, sehingga άνθρωπος menjadi ΑΝΘΡΩΠΟΣ dan bukan ΆΝΘΡΩΠΟΣ, karena bahasa Yunani tidak menuliskan aksen pada huruf kapital. Bahasa Azerbaijan berbagi dengan Turki soal i bertitik dan tanpa titik.
Dua kasus terkenal bukanlah aturan bahasa, dan ada gunanya mengetahui mana yang mana. Huruf ß Jerman menjadi SS dalam setiap bahasa, karena itu aturan SpecialCasing dari Unicode dan bukan aturan Jerman — itu pula sebabnya pemetaannya tidak dapat dibalik, dan SS kembali menjadi ss. Lalu sigma Yunani di akhir kata menjadi bentuk akhir ς dan bukan σ, di mana pun: itu syarat kontekstual atas posisi karakter, bukan pengaturan bahasa. Keduanya terlihat di alat ini bahkan tanpa memilih bahasa apa pun.
Di sini Title case dan Sentence case bersifat mekanis
Title Case pada alat ini membesarkan huruf pertama setiap kata dan mengecilkan sisanya. Sentence case membesarkan huruf pertama teks dan huruf pertama setiap kalimat sesudahnya, dengan kalimat berakhir pada titik, tanda seru, tanda tanya, atau elipsis yang diikuti spasi. Keduanya mengecilkan masukan terlebih dahulu, dan justru itulah yang membuatnya berguna pada teks yang datang DENGAN BERTERIAK.
Ini aturan yang sengaja dibuat mekanis, dan alternatifnya layak dijelaskan. Panduan gaya bahasa Inggris mendefinisikan penulisan judul lewat kata-kata pendek mana yang tetap kecil — dan mereka saling berselisih soal daftarnya, soal apakah kata setelah titik dua dibesarkan, dan soal preposisi berhuruf empat atau lebih. Menerapkan salah satunya di sini berarti mengirimkan konvensi surat kabar Amerika kepada pembaca yang menulis dalam bahasa Ibrani, Jepang, atau Turki, tempat konsep itu sama sekali tidak berpindah. Membesarkan setiap kata bersifat dapat diramalkan, dapat dijelaskan dalam bahasa mana pun, dan mudah disesuaikan dengan tangan setelahnya.
Syarat spasi pada Sentence case adalah yang mencegah 3.5 metres menjadi 3.5 Metres, sebab titik di sana diikuti angka. Namun ia tidak menyelesaikan singkatan: e.g. this tetap memulai kalimat palsu, karena mengetahui bahwa «e.g.» bukan akhir kalimat menuntut daftar singkatan bahasa tersebut. Apostrof di dalam kata juga tidak memulai kata baru, sehingga it's dibesarkan sekali saja dan menghasilkan It's, bukan It'S.
Mengurutkan: urutan abjad atau urutan bita
Alat baris memangkas, menghapus duplikat, mengurutkan, membalik, dan menomori, dan pengurutan memunculkan persoalan bahasa untuk kedua kalinya. Urutan abjad adalah sifat sebuah bahasa, bukan sifat Unicode. Bahasa Jerman menempatkan ä di samping a: a, ä, z. Bahasa Swedia memperlakukannya sebagai huruf tersendiri di akhir abjad: a, z, ä. Keduanya benar di negerinya masing-masing, dan alat ini memakai bahasa yang Anda pilih di bagian atas halaman.
Pilihan lainnya adalah urutan titik kode, yaitu yang Anda inginkan ketika jawabannya harus cocok dengan sesuatu yang lain. Membandingkan berdasarkan titik kode adalah urutan bita dalam UTF-8, sehingga ia mereproduksi persis apa yang dihasilkan LC_ALL=C sort, git, dan perbandingan string bawaan pada sebagian besar bahasa pemrograman: semua huruf kapital sebelum semua huruf kecil, sehingga B mendahului a. Pilih ini ketika Anda membandingkan dengan keluaran sebuah alat; pilih pengurutan menurut bahasa ketika daftarnya akan dibaca manusia.
Urutan angka alami — item2 sebelum item10 dan bukan sesudahnya — adalah fitur pengurutan menurut bahasa, sehingga hanya tersedia dengan aturan abjad. Urutan bita tidak mengenal konsep angka di dalam sebuah string, begitu pula pengurutan yang ditirunya, sehingga menawarkan keduanya sekaligus berarti menjanjikan sesuatu yang tidak dapat dipenuhi keluarannya.
Operasi dijalankan dalam urutan tetap, dan urutan itu penting. Pemangkasan terjadi sebelum penghapusan duplikat, sehingga dua baris yang hanya berbeda pada spasi di ujungnya dikenali sebagai baris yang sama. Pengurutan terjadi sebelum pembalikan, sehingga membalik selalu berarti «balikkan yang sedang saya lihat». Jumlah baris kosong dan jumlah duplikat yang dihapus sama-sama dilaporkan, sebab penghitungan yang diam adalah cara Anda gagal menyadari bahwa daftar itu bukan seperti yang Anda kira.
Di mana ini berjalan
Semuanya terjadi di peramban Anda. Pemetaan huruf besar-kecil berasal dari implementasi Unicode pada mesin JavaScript itu sendiri dan pengurutan berasal dari Intl.Collator, sehingga jawabannya sesuai dengan lingkungan yang benar-benar akan memproses string Anda, bukan dengan tabel yang disalin seseorang bertahun-tahun lalu. Tidak ada yang Anda tempel diunggah, disimpan, atau dicatat, sehingga alat ini aman dipakai untuk nama, baris log, dan apa pun yang lebih baik tidak Anda kirim ke server hanya untuk mengubah huruf besar-kecilnya.
Pertanyaan yang sering diajukan
- Apakah teks saya dikirim ke server?
- Tidak. Setiap konversi berjalan di peramban Anda menggunakan pemetaan huruf besar-kecil Unicode dari mesin JavaScript itu sendiri, dan tidak ada yang Anda tempel diunggah atau dicatat.
- Mengapa memilih bahasa Turki menampilkan dua hasil berbeda?
- Karena bahasa Turki mengubah jawabannya. Abjadnya memiliki i bertitik dan ı tanpa titik, sehingga kapital dari i adalah İ dan bukan I. Setiap kali sebuah bahasa mengubah hasil, alat ini menampilkan jawaban yang tidak bergantung bahasa di sampingnya, karena itulah yang dibutuhkan pengidentifikasi dan token protokol.
- Sebaiknya memakai pemetaan yang tidak bergantung bahasa atau pemetaan sebuah bahasa?
- Pakai pemetaan yang tidak bergantung bahasa untuk apa pun yang akan dibaca mesin: pengidentifikasi, header HTTP, kunci basis data, token protokol, nama berkas. Pakai pemetaan sebuah bahasa untuk teks yang akan dibaca orang dalam bahasa itu. Mencampuradukkan keduanya adalah bug i Turki yang klasik.
- Mengapa XMLHttpRequest diubah menjadi XmlHttpRequest?
- Karena akronim disusun ulang secara bawaan, sebagaimana yang dilakukan lodash dan beberapa panduan gaya besar. Aktifkan opsi akronim untuk mempertahankan rangkaian kapital dan mendapatkan XMLHttpRequest kembali. Opsi ini hanya memengaruhi camelCase dan PascalCase, karena bentuk lain toh menyusun ulang setiap kata.
- Mengapa utf8 tetap satu kata padahal lodash memisahkannya?
- Karena di sini angka menempel pada kata di depannya, sehingga utf8 dan address2 lolos utuh. Angka yang diikuti huruf kapital memang memulai kata baru, dan itulah yang memisahkan html5Parser menjadi html5 dan Parser.
- Mengapa Title Case membesarkan kata pendek seperti «of» dan «the»?
- Karena aturannya sengaja mekanis. Panduan gaya bahasa Inggris saling berselisih tentang kata pendek mana yang tetap kecil, dan konvensi mereka tidak berpindah ke bahasa lain yang dilayani situs ini. Membesarkan setiap kata bersifat dapat diramalkan dan mudah disesuaikan dengan tangan.
- Mengapa saya tidak bisa memakai urutan angka alami dengan pengurutan titik kode?
- Urutan alami adalah fitur pengurutan menurut bahasa. Urutan titik kode adalah urutan bita yang tidak mengenal angka di dalam string — begitu pula LC_ALL=C sort yang ditirunya. Menawarkan keduanya akan menghasilkan keluaran yang tidak lagi cocok dengan alat yang ditiru.
- Mengapa ß menjadi SS bahkan tanpa bahasa yang dipilih?
- Karena pemetaan itu adalah aturan SpecialCasing dari Unicode dan bukan aturan bahasa Jerman, sehingga berlaku di mana saja. Ia juga tidak dapat dibalik: SS menjadi ss, bukan kembali menjadi ß. Sigma akhir Yunani bekerja dengan cara yang sama — ia bergantung pada posisi huruf, bukan pada bahasa.