Labels

Wednesday, December 30, 2009

Анхны Python программ

Энэ бүлэгт ерөнхийдөө бусад төрлийн программчилалын номнуудын бүтцийг март гэнээ. Өөрөөр хэлбэл бусад төрлийн программчилалын номнуудын хувьсагч, өгөгдлийн төрлүүд, ажиллах зарчим, бичигдэх хэлбэр гэх мэтээр үздэг дарааллуудыг алгасуулж шууд python хэл дээр жижиг хэмжээний программууд хийлгэн түүнийгээ тайлбарлаад явах бололтой.


Тэхээр эхний хийх программ бол:
def buildConnectionString(params):
    """Build a connection string from a dictionary of parameters.
    Returns string."""
    return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
if __name__ == "__main__":
    myParams = {"server":"mpilgrim", \
                "database":"master", \
                "uid":"sa", \
                "pwd":"secret" \
                }
    print buildConnectionString(myParams)
Үүнийг "odbchelper.py" гэсэн нэртэйгээр хадгалаад ажиллуулж үзье.
Үр дүн нь: pwd=secret;database=master;uid=sa;server=mpilgrim

Тайлбар:
    Функц зарлах:
def buildConnectionString(params):
Энэ мөр нь шинээр "buildConnectionString" гэсэн нэртэй функц үүсгэж байгаа ба Python хэлд функц зарлахдаа "def" гэсэн түлхүүр үгээр функц зарладаг байх нь ээ. Дээрх хашилтан доторх "params" гэсэнд тухайн үүсгэж байгаа функцдээ авах утгуудыг оруулж өгнө. Жишээ нь:
def DatabaseConnection(host, user, pass, db)
"DatabaseConnection" нэртэй функц бөгөөд "host", "user", "pass", "db" гэсэн утгууд авна.
    Баримтжуулалт
 Харин """Build a connection string from a dictionary of parameters.
    Returns string."""
энэ мөр нь Python хэлнээ маш өргөн хэрэглэгддэг зүйл юм байна. Энэ нь функцын баримтжуулалтыг тодорхойлж өгдөг зүйл гэнэ. Ямар нэгэн функцэд баримтжуулалт нь 1 мөр ба олон мөр гэж хоёр янз байдаг ба саяний тохиолдолд олон мөрт баримтжуулалтыг хэрэглэсэн байна.

Эндээс бусад хэлэнд бараг байдаггүй баримтжуулалт гэдэг ойлголт гарч ирж байна( doc string гэж нэрлэдэг бололтой ). бид бусад хэлэнд их хэрэглэдэг коммент нь программын ажиллагаанд огт нөлөөлдөггүй буюу ажилдаггүй тайлбар текст байдаг бол Python хэлний баримтжуулалт нь тухайн функцийн ажиллагааг илтгэх ба шаардлагатай үед түүнийг функцын "property" болгон хэрэглэдэг юм байна. Ерөнхийдөө функцийн хамгийн эхний үйлдэл гэхиймуудаа ":" буюу тодорхойлох хоёр цэгийн араас бичигддэг хамгийн эхний тэмдэгтүүд бол баримтжуулалт байх нь( баримтжуулалт заавал байх ёстой гэсэн үг биш шүү! байхгүй ч байж болно ). ихэнхи тохиолдолд """ буюу 3 ширхэг " тэмдгийн араас бичдэг. Жишээ нь:
def DatabaseConnection(host, user, pass, db):
      """Яг энэ хэсэг Өгөгдлийн сантай холболт үүсгэх функцийн doc string 
      бөгөөд яг одоо олон мөрт doc string үүсгээд байна."""
Иймэрхүү байдалтай хэрэглээд явах аж.

    Нөхцөл шалгалт
Python хэлэнд нөхцөл шалгах if операторын хэрэглээ маш энгийн байгаа нь дээрх жишээнээс харагдаж байна.
 if __name__ == "__main__":
    myParams = {"server":"mpilgrim", \
                "database":"master", \
                "uid":"sa", \
                "pwd":"secret" \
                }
    print buildConnectionString(myParams)
ерөнхийдөө эхний "if" гэсний араас шалгах үйлдлээ оруулж өгөх ба яг шалгалт маань "if"-ийн хамт нэг мөрөнд бичигднэ. Энд нэг онцгой зүйл байсан нь бусад хэлэнд "if (i = b)" гэж байвал "i"-д "b"-ийн утгыг олгоод "true" утга буцаадаг бол Python хэлэнд жишихээр ойлгодог байна. Өөрөөр хэлбэл нөхцөл шалгаж байх үед ямар нэгэн хувьсагчийн утгыг өөрчлөх нэмэх, хасах, тэнцүүлэх... гэх мэт арифметик үйлдлүүд хийгдэдгүй байх нь ээ. Ингэснээр программ бичих явцад гаргадаг жижиш алдаанууд багасах учиртай юм байх...
Мэдээж ":" буюу тодорхойлох хоёр цэгийн араас нөхцлийн биелэлтээс хамаарсан дараа дараагийн үйлдлүүд хийгдэнэ.
    Өгөгдлийн төрөл
Номон дээр өгөгдлийн төрлийг тайлбарлахдаа бусад хэлүүдтэй харьцуулж тайлбарласан байна.
statically typed language
         A language in which types are fixed at compile time. Most statically typed languages enforce this by requiring
         you to declare all variables with their datatypes before using them. Java and C are statically typed languages.

         Ийм төрлийн программчилалын хэл нь компайл хийх үед өгөгдлийн төрлийн тодорхойлсон байдаг. Ихэнхи статикаар төрөлжүүлсэн хэлүүд нь өгөгдлийн төрлийг тус тусад нь тодорхойлохыг мөрдлөг болгодог. Та хувьсагч зарлах бүртээ түүний өгөгдлийн төрлийг тодорхойлж өгсөн байх шаардлагатай. Жава болон Си хэлүүд нь ийм төрлийн программчилалын хэлэнд багтана.
dynamically typed language
         A language in which types are discovered at execution time; the opposite of statically typed. VBScript and
         Python are dynamically typed, because they figure out what type a variable is when you first assign it a value.

         Хувьсагчийн төрлийг динамикаар тодорхойлдог хэлүүд нь ажиллах үедээ хувьсагчдын төрлийг өөрөө ойлгодог. Дээрхийн эсрэг гэсэн үг л дээ. Python бол ийм төрлийн программчилалын хэл ба хувьсагчыг зарлахдаа төрлийг нь тодорхойлолгүй шууд утгыг нь оноож орхидог. (PHP хэл хүртэл үүнтэй ижил динамик төрөлжүүлэгч хэл :P)
strongly typed language
         A language in which types are always enforced. Java and Python are strongly typed. If you have an integer,
         you can't treat it like a string without explicitly converting it.

         Хувьсагчийн төрлийг хүчтэй тодорхойлж өгсөн хэлүүд бас байнаа. Энэ нь ямар нэг хувьсагчийн төрлийг тодорхойлсноос хойш программын бүхий л ажиллагааны турш өгөгдлийн төрлийг өөрчлөх боломжгүй хэлүүдийг хэлдэг. Жава болон Python хэлүүд яг ийм төрлийн хэлд тооцогддог гэнэ.
weakly typed language
         A language in which types may be ignored; the opposite of strongly typed. VBScript is weakly typed. In
         VBScript, you can concatenate the string '12' and the integer 3 to get the string '123', then treat that as
         the integer 123, all without any explicit conversion.

         Дээрхийн эсрэг буюу хувьсагчийн төрлийг хайхралгүй үйлдэл хийдэг хэлүүд үүнд багтдаг. Жишээлбэл VBScript дээр 12 гэсэн тэмдэгт мөрийн араас 3 утгатай бүхэл тоон хувьсагчийн холбоход утга нь 123 гэсэн бүхэл тоон утга болдог байна.

Өнөөдрийн хувьд энэ хүргээд өндөрлье. Дээрх жишээнээс Python хэлийн ерөнхий бичиглэлийг ойлгож авхаас гадна өгөгдлийн төрөл, функц зарлах, баримтжуулалт зэргийг мэдэж авлаа. Та бүхэн ч гэсэн өөрийн мэдсэн, ойлгосон зүйлийнхээ талаар сэтгэгдэл бичин хуваалцана уу :)

4 comments:

@d@ said...

Анхны програм гэж нэрлэхэд ахадсан эд бишүү. Ууг hello world мэтхэнийг л анхны про л гээд байдын байнлээшд. :)

Мандах said...
This comment has been removed by the author.
Мандах said...

Гайгүйшдээ. Энэ яг өгөгдлийн сангийн холболт үүсгээгүй. Dictionary-ийн утгуудаас өгөгдлийн сантай холболт үүсгэх тэмдэгт мөрийг боловсруулан, буцаах үйлдэл хийж байгаа функц байгаа. :D

ochiroo said...

Тайлбарыг чинь ч ойлгоход хэцүү юм байна