Програмчлалд юмсыг хэрхэн нэрлэх талаар

Myagmarsuren Tserenchimed
Nomadays
Published in
4 min readNov 14, 2017

Баталгаатай нэг зүйл бол бид код бичихэд зарцуулснаас илүү цаг хугацааг бичигдсэн кодыг уншиж ойлгоход зориулдаг. Тиймээс оновчтой нэрлэх нь ирээдүйдээ илүү ач холбогдолтой юм.

Хөгжүүлэгчдэд нийтлэг тулгардаг асуудлуудын нэг нь нэр өгөх. Би хичнээн цагийг ямар нэг зүйлийг нэрлэх гэж эсвэл ямар нэг муу нэрлэгдсэн кодыг ойлгох гэж сууснаа мэдэхгүй юм. Тэр зүйл нь обьект, функц эсвэл класс байх нь хамаагүй. Ямар ч байсан бичсэнээсээ илүү ойлгохдоо илүү цаг зарцуулдаг нь баталгаатай.

Сайн нэрлэх нь бичсэн кодыг ойлгомжтой цэвэрхэн болгодог. Ингэснээр код тус бүр ямар үүрэг зориулалттайг зөн совингоороо тодорхойлоход туслана. Ойлгомжтой нэрлэснээр бичсэн аппликейшн ирээдүйд бусад хөгжүүлэгчдэд болон өөрт хялбархан ойлгогдоно.

Дараагийн хэдэн минутад би та бүхэнд нэр өгөхөд юу чухал болох мөн сайн нэр олоход туслах хэдэн зөвлөмж өгөх болно.

Хийсвэрлэх түвшин

Функц болон Хувьсагчууд тухайн кодонд ямар үүрэг зориулалтай болохыг нэрлэхээсээ өмнө бодож үзээрэй.

Доорх кодонд Варшаваас Парис хүртлэх зайг буцаадаг функц байна.

Амархан зөв ажиллахаар харагдаж байна. Гэвч шаардлагыг нь жоохон өөрчилвөл юу болох вэ? Тэгвэл гарах үр дүнг kilometer болон mile-аар гарах боломжтой болгоё. Тэхийн тулд классд хувьсагч зарлах хэрэгтэй болно. Энэхүү хувьсагч нь to_s функын буцах утгандах km текстийг солиход хэрэглэнэ.

Шинэ хувьсагчийг нэрлэхдээ утгаас нь нэг түвшин дээгүүр хийсвэрлэх хэрэгтэй. Энэ юу вэ гэхээр хувьсагчид байж болох утгыг биш зориулалтыг түрүүлж бодсоноор хувьсагчид илүү ерөнхий нэр өгөхөд туслах болно. Тэгэхлээр нэр нь хувьсагчийн авч болох утгуудыг биш зорилгыг илтгэх хэрэгтэй.

Манай шинээр зарласан хувьсагчийн үүрэг юу вэ? Шинэ хувьсагч нь km эсвэл mi гэсэн үгийг обьектэд хийж өгөх. Магадгүй хувьсагчийн нэрkilometers_or_miles байж болох юм. Гэвч энэ нь хувьсагчийн авч болох утгатай нэг түвшний хийсвэрлэл юм. Хэрвээ хувьсагч өөр төрлийн утга (жнь: days) авах шаарлага нэмэгдвэлkilometers_or_miles гэсэн нэр буруу болно. Илүү ерөнхий нэр бодож олох хэрэгтэй. Kilometer болон Mile бол хэмжих нэгж, тэхээр хамгийн тохирох нэр болunit. Ингэж нэрлэснээр хувьсагчийн утгаас нэг түвшин дээгүүр(илүү ерөнхий) хээсвэрлэж байна. Доорх зурган дээр классын засварыг харуулав.

Дараагийн шаардлага бол Варшаваас Парис хүртэл 1591 км бөгөөд mile аар бодвол 988 mi болгодог функц хэрэгтэй. Дүрэм бол unit тэй ижилхэн. Функцийн нэрийг distance_warsaw_parisгэж болох боловч буцаах утгатай нэг түвшинд хийсвэрлэсэн хэтэрхий дэлгэрэнгүй харагдаж байна. Хувьсагчид нэр өгөхтэй адилхан функцийн буцаах боломжит утгыг агуулсан нэр байх хэрэгтэй.

Ирээдүйд хотын нэр өөрчлөгдөж(London-оос New York гэх мэт) болно. Тиймээс хамгийн тохиромжтой нэр бол distance. Фүнкцийн утгаас нэг түвшинд дээгүүр хийсвэрлэсэн. Дээрх өөрчлөлтийг оруулснаар класс маань ингэж харагдаж байна:

Классын нэр болон хийсвэрлэх түвшин

Функц болон хувьсагч нь утга болон буцаах утгаасаа нэг түвшин дээгүүр хийсвэрлэх ёстой байсан. Харин классын хувьд шинээр класс үүсгэж байхдаа ирээдүйн талаар бодох шаардлагагүй. Классын нэр яг одоо юунд зориулж байгаагаар тодорхойлогдоно. Машиныг ирээдүйд завь байх боломжтой гэж хийсвэрлэж болохгүй. Аппликейшны одооны хэрэгцээ шаардлагаар классын шинж нь машин юм бол классын нэр Vehicleбиш Carбайх ёстой.

Хүү классууд ч мөн адил зарчимаар нэрлэгдэх хэрэгтэй. Carклассын тодорхой шинж чанарыг агуулсан шинэ хувилбарыг нэмж болно. Жишээ нь CarPickupбол Carын арай том зайтай хувилбар юм.

Агуулгаасаа нэг түвшин дээр хийсвэрлэж нэрлэх нь зөвхөн функц болон хувьсагчид л хамаатай харин классийг нэрлэх бол огт өөр зүйл юм.

Ганцхан үүрэгтэй байх зарчим

Баталгаатай нэг зарчим бол бүх модул болон класс зөвхөн ганцхан шалтгаанд зориулагдах ёстой. Ганцхан үйлдэлтэй элементийг нэрлэхэд амархан.

Жишээлбэл, Лонхны цорын ганц үүрэг бол шингэн зүйлийг агуулах. Лонх хөдөлдөг байх эсвэл өөр зүйлс хийдэг байх шаардлагагүй. Эдгээр нь аппликейшн дэх лонхны үндсэн үүрэг биш юм. Тэгвэл хөдөлдөг бас шингэн зүйл агуулдаг савыг юу гэж нэрлэх вэ?

Энэ жаахан хэцүү. Лонх бол зүгээр л энгийн жишээ. Лонхыг явж, бүжиглэж, гүйж, ярьж чаддаг болгохоос илүү ганцхан үүрэгтэйгээр ашиглах нь зөв. Тэгэхлээр шингэн зүйл агуулагчийг лонх буюу Bottleкласс, лонхыг хөдөлгөж авч явдаг өөр нэг классыгBottleCarrierгэж нэрлэх хэрэгтэй.

Ганцхан үүрэгтэй байх зарчим нь хувьсагчид ч хамаатай. Хувьсагчийн функц, класс, бусад хувьсагч ямар байхаас үл хамааран хувьсагч бүр ганцхан үүрэг зориулалттай байх ёстой. Классыг нэрлэсэнтэй адилхан нэг үүрэгтэй хувьсагчийг нэрлэхэд амархан.

Домайн бол жижиг хэсгүүдийн багц гэдэгийг анхаарах

Сайн архитектур сайн нэршилтэй хосолж байдаг. Асуудлуудыг шийдэж чадна гэдгээ ойлгох үед юмсыг нэрлэхэд амархан. Илүү дээр архитектуртай байх нэг арга бол даалгаварын бүх хэсгүүдийг жижиг хэсгүүдэд хуваах. Ингэснээр хурдан амархан нэрлэх боломжтой болгоно.

Зүгээр бодоод үз, хэрэв обьект болон модулууд яг ямар зорилготой вэ гэдэгийг мэдэж байвал нэрлэхэд илүү эвтэйхэн байна. Тэгвэл машин обьектыг тайлбарлая. Бүх фүнкцүүдийг нэг классд тодорхойлох нь хүндрэлтэй. Гэхдээ олон жижиг хэсгүүдэд салгаж болно. Жишээ нь:Wheel, Tire, SteeringWheelклассууд болон бусад машины агуулж болох классууд. Эдгээр жижиг хэсгүүдийн зорилгыг тодорхойлох болон нэрлэхэд хялбархан байна. Хэрвээ ямар нэг хэсэгийг нэрлэхэд хүндрэлтэй байгаа бол аппликейшн архитектурт чинь асуудал байж магадгүй юм.

Дүгнэлт

Сайн нэрлэгдсэн хувьсагч, функц, обьект болон класс одоо эсвэл дараа нь үр өгөөжөө заавал өгнө. Энэхүү нийтлэлдээ сайн нэр өгөхөд тус болох хэдэн энгийн аргуудаас харууллаа.

  • Агуулгаас нь нэг түвшин дээгүүр хийсвэрлэх (классын нэрээс бусад дээр)
  • Классын нэр ямар үүрэгтэйг илтгэдэг байх ёстой
  • Ганцхан үүрэгтэй байх гэсэн батлагдсан дүрмийг баримтлах
  • Асуудлыг жижиг хэсгүүдэд хуваах

Тохиромжтой нэрлэхэд хэцүү байх ёсгүй. Зөв аргаар нэрлэхэд цаг хугацаа зарцуулах шаардлагатай. Гэвч дээр дурьдсан зөвлөмжийг дагаад үзээрэй процессийг илүү хурдлуулна гэж найдаж байна.

Та бүхэн бидэнтэй нэгдэн ажиллахыг хүсвэл бидний зарласан нээлттэй ажлын байруудтай танилцана уу.

Эх сурвалж: https://blog.elpassion.com/naming-101-quick-guide-on-how-to-name-things-a9bcbfd02f02

--

--