Analisis Penerbangan: Cara Membunuh Unta dengan Benar 🐪

Dalam kerangka konversi string universal ke snake_case, pendekatan dengan regex ini mungkin adalah opsi terbaik:

import re

def to_snake_case(s: str) -> str:
s = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', s)
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s).replace('-', '_').lower()


🧐 Bagaimana cara kerjanya?

1️⃣ re.sub('(.)([A-Z][a-z]+)', r'\1_\2', s) mengganti setiap huruf kapital yang mendahului huruf kecil dengan huruf yang sama tetapi dengan garis bawah di depannya.

2️⃣ re.sub('([a-z0-9])([A-Z])', r'\1_\2', s) mengganti setiap huruf kapital yang mendahului huruf kecil atau angka dengan huruf yang sama tetapi dengan garis bawah di depannya.

3️⃣ Kemudian semuanya diubah menjadi huruf kecil dan tanda hubung diganti dengan garis bawah.

Tapi mari kita melampaui batas soal algoritma dan lihat bagaimana masalah seperti ini diselesaikan di dunia nyata. Jika proyek menggunakan Pydantic, maka semua ini sudah ditulis, diuji pada jutaan baris kode, dan tersedia langsung di dalam kotak:

from pydantic import BaseModel, ConfigDict
from pydantic.alias_generators import to_camel, to_snake

class FrontendData(BaseModel):
model_config = ConfigDict(
alias_generator=to_camel, # Otomatis mengharapkan camelCase pada input
populate_by_name=True
)

python_talk: str # Dalam kode kita bekerja dengan snake_case yang ortodoks

Di balik layar terdapat algoritma yang dipoles yang mempertimbangkan kasus tepi, pemisah non-standar, dan imajinasi sakit dari pengembang sistem tetangga.

Dan jika Pydantic tidak ada dalam proyek, ada perpustakaan mikro seperti inflection yang melakukan hal yang sama:
import inflection

inflection.underscore("CamelCaseAnd-kebab-case")
# -> 'camel_case_and_kebab_case'

inflection.camelize("python_talk", uppercase_first_letter=False)
# -> 'pythonTalk'


Penting untuk mengetahui algoritma regex agar lulus wawancara algoritma dan memahami bagaimana string diurai. Namun, penting untuk mengetahui alat agar tidak membawa sepeda buatan sendiri ke produksi yang pasti akan rusak pada payload pertama yang aneh.

#wawancaraalgoritma