Ачааллж байна...
Бүлэг 10-т бид алдаа гарсны дараа түүнийг олж засах хэрэгслүүдийг сурсан. Бүлэг 11 өөр асуултаас эхэлнэ: кодыг алдаа гарахаас өмнө, бичих явцад нь хэрхэн илүү цэвэр, уншигдахуйц, найдвартай болгох вэ? Энэ бүлгийн дөрвөн хичээлийн эхнийх нь хамгийн энгийн мэт санагдах ч хамгийн их цаг хэмнэдэг хэрэгсэл: black. black бол кодын хэлбэр загварыг автоматаар нэг стандартад оруулдаг formatter юм. Зай хаана тавих, хашилт ямар байх, урт мөрийг хэрхэн хуваах, функцуудын хооронд хэдэн хоосон мөр үлдээх зэрэг асуултуудыг black таны өмнөөс шийднэ.
Энэ хичээлд бид black-ийг суулгаж, санаатайгаар эмх замбараагүй бичсэн файлд хэрэглээд, өмнө ба дараах байдлыг харьцуулна. black кодын хэлбэрийг өөрчилдөг ч утгыг нь хэзээ ч өөрчилдөггүйг программыг өмнө ба дараа нь ажиллуулж баталгаажуулна. black-ийн хоёр хамгаалалтын горимыг, өөрчлөлтийг урьдчилан харах --diff, зөвхөн шалгах --check-ийг сурна. Дараа нь бүхэл төслийг нэг command-аар хэлбэржүүлж, тестүүд давсаар байгааг батална. Эцэст нь black-ийн хамгийн чухал санааг ярина: хэлбэрийн тухай маргаан энд дуусна.
Төрийн байгууллагын албан бичгийг санаарай. Бичиг бүр ижил хэлбэртэй: толгойн байрлал, огноо, дугаар, гарын үсгийн байр, үсгийн хэмжээ бүгд тогтсон загвартай. Бичиг бичдэг хүн "огноог баруун тийш эсвэл зүүн тийш тавих уу" гэж хэзээ ч бодохгүй, загвар аль хэдийн шийдсэн. Үүний үр дүнд хоёр зүйл бий болдог. Нэгдүгээрт, бичиг бичигч бүх анхаарлаа агуулгад зарцуулна. Хоёрдугаарт, бичиг уншигч ямар ч бичгийг нээхэд хаанаас юу хайхаа шууд мэднэ.
black бол кодын албан бичгийн загвар. Хэлбэрийн бүх шийдвэрийг тэр гаргана: та агуулгад, программын логикт төвлөрнө. Мөн black ашигладаг аль ч төслийн кодыг нээхэд хэлбэр нь танил, таны өөрийн код шиг уншигдана. black-ийн уриа нь "буулт хийдэггүй formatter": тэр бараг ямар ч тохиргоо санал болгодоггүй. Энэ нь сул тал биш, яг гол санаа нь: сонголт байхгүй бол маргах зүйл ч байхгүй.
Програмчлалын багуудад хамгийн их цаг үрдэг маргаануудын нэг бол кодын хэлбэр. Нэг хүн давхар хашилт дуртай, нөгөө нь дан. Нэг нь таслалын дараа зай тавьдаг, нөгөө нь тавьдаггүй. Урт мөрийг хэрхэн хуваах тухай хүн бүр өөрийн бодолтой. Ийм маргаан утгагүй мэт санагдах ч бодитоор цаг хорогдуулдаг: 6.2 дугаар хичээлийн pull request-ийн хянах үеэр reviewer программын логикийн оронд хашилтын тухай сэтгэгдэл бичиж эхэлдэг. Мөн хүн бүр өөрийн хэв маягаар бичвэл diff-үүд утгагүй хэлбэрийн өөрчлөлтөөр дүүрч, жинхэнэ өөрчлөлт нуугддаг.
black энэ асуудлыг үндсээр нь шийддэг: хүн бүр black ажиллуулбал хэн ч хэлбэрийн тухай шийдвэр гаргахгүй. Хэлбэр нь хүний шийдвэр биш, хэрэгслийн гаралт болно. Хэлбэрийн тухай маргаан утгагүй болж, хянах ажил зөвхөн чухал зүйлд төвлөрнө. black-ийн хэлбэр нь Python-ий албан ёсны хэв маягийн заавар болох PEP 8-тай нийцдэг бөгөөд түүний тухай 11.3 дугаар хичээлд ярина.
Алхам 1: black суулгах
VS Code-д pytest-dadlaga фолдероо нээж, venv идэвхтэй эсэхийг шалгаарай: мөрийн эхэнд “(venv)” байх ёстой.
Command:
pip install blackГаралт (сүүлийн мөр):
Successfully installed black-26.3.1 click-8.3.0 mypy-extensions-1.1.0 pathspec-1.0.3 platformdirs-4.5.0 pytokens-0.3.0pytest-ийн нэгэн адил black өөрийн хамаарлуудыг хамт суулгалаа. click бол black-ийн command line-ийг удирддаг, pathspec нь .gitignore-ийг уншдаг гэх мэт. Таны хувилбарууд илүү шинэ байж болно.
Command:
black --versionГаралт:
black, 26.3.1 (compiled: yes)
Python (CPython) 3.13.7Эхний мөр black-ийн хувилбар. “compiled: yes” нь black хурдан ажиллахын тулд хөрвүүлсэн хэлбэрээр суусныг заана. Хоёр дахь мөр black ажиллаж буй Python. black-ийг pytest шиг хөгжүүлэлтийн хэрэгсэл гэж үзнэ: бодит төсөлд түүнийг 9.3 дугаар хичээлийн requirements-dev.txt-д нэмнэ.
Алхам 2: Эмх замбараагүй файл
Үндсэн фолдерт messy.py нэртэй файл үүсгэж, дараах кодыг яг ингэж, бүх зай, хашилттай нь бичнэ үү. Эмх замбараагүй байдал нь санаатай.
python
def receipt_summary( items,vat_rate=10 ):
total=sum( price*qty for name,price,qty in items )
lines=[ f"{name}: {price*qty}" for name,price,qty in items ]
return {'total':total+total*vat_rate//100,'lines':lines,'count':len( items )}
x = receipt_summary([('талх',2000,2),('сүү',3000,1),('өндөг',500,10),('ус',1000,3)])
print( x )Энэ код ажилладаг, гэхдээ уншихад хэцүү. Функцийн нэрийн өмнө хоёр зай, хаалтын дотор илүү зай, таслалын дараа зай алга, тэнцүүгийн тэмдгийн хоёр талд зай алга, хашилт дан, нэг мөр маш урт, функц болон доорх кодын хооронд хоосон мөр алга. Хэлбэр бүрэн тогтворгүй, хүн шуурхай бичихдээ яг ийм код үлдээдэг.
Ажиллуулъя.
Command:
python messy.pyГаралт:
{'total': 16500, 'lines': ['талх: 4000', 'сүү: 3000', 'өндөг: 5000', 'ус: 3000'], 'count': 4}Энэ гаралтыг санаарай. Black-ийн дараа яг ижил гаралт гарах ёстой.
Алхам 3: Өөрчлөлтийг урьдчилан харах
black файлыг шууд өөрчилдөг. Анх удаа ашиглахдаа юу өөрчлөх гэж байгааг эхлээд харах нь зөв. “--diff” горим файлд хүрэлгүйгээр өөрчлөлтийг харуулна.
Command:
black --diff messy.pyГаралт:
--- messy.py 2026-10-08 12:50:01.123456+00:00
+++ messy.py 2026-10-08 12:52:10.654321+00:00
@@ -1,6 +1,15 @@
-def receipt_summary( items,vat_rate=10 ):
- total=sum( price*qty for name,price,qty in items )
- lines=[ f"{name}: {price*qty}" for name,price,qty in items ]
- return {'total':total+total*vat_rate//100,'lines':lines,'count':len( items )}
-x = receipt_summary([('талх',2000,2),('сүү',3000,1),('өндөг',500,10),('ус',1000,3)])
-print( x )
+def receipt_summary(items, vat_rate=10):
+ total = sum(price * qty for name, price, qty in items)
+ lines = [f"{name}: {price*qty}" for name, price, qty in items]
+ return {
+ "total": total + total * vat_rate // 100,
+ "lines": lines,
+ "count": len(items),
+ }
+
+
+x = receipt_summary(
+ [("талх", 2000, 2), ("сүү", 3000, 1), ("өндөг", 500, 10), ("ус", 1000, 3)]
+)
+print(x)
would reformat messy.py
All done!
1 file would be reformatted.Энэ гаралтыг 2.3 дугаар хичээлийн git diff-ийн аргаар уншина: ижил хэлбэр. “---” ба “+++” мөрүүд хуучин ба шинэ хувилбар, араас нь цаг. “@@ -1,6 +1,15 @@” нь хуучин 6 мөр шинэ 15 мөр болно гэсэн утгатай. “-” мөрүүд одоогийн файл, “+” мөрүүд black-ийн санал болгож буй хувилбар. Доод гурван мөр black-ийн тайлан: “would reformat messy.py” буюу “messy.py-г хэлбэржүүлэх байсан”, “1 file would be reformatted” буюу “1 файл хэлбэржих байсан”. “would” гэдэг үг "хэрвээ ажиллуулсан бол" гэсэн утга өгнө: файл өөрчлөгдөөгүй. black “All done!” мөрийн төгсгөлд жижиг чимэглэлийн дүрсүүд хэвлэдэг, энэ хичээлийн гаралтуудад тэдгээрийг орхисон.
Одоо “+” мөрүүдийг анхааралтай уншиж, black юу хийснийг харцгаая. Функцийн нэрийн өмнөх илүү зай, хаалтуудын доторх зайнууд арилсан. Таслал бүрийн дараа нэг зай нэмэгдсэн. “=” ба “*” зэрэг үйлдлийн тэмдгүүдийн хоёр талд зай. Дан хашилт бүгд давхар хашилт болсон. Урт return мөр dictionary-ийн түлхүүр бүрийг тусдаа мөрөнд хуваасан, төгсгөлд нь таслал нэмсэн. Функцийн дараа хоёр хоосон мөр нэмэгдсэн: Python-ий заншлаар файлын түвшний функц, класс бүрийн өмнө, дараа хоёр хоосон мөр байдаг. Урт x мөр хаалтын дотор хуваагдсан.
Нэг зүйлийг black хөндөөгүйг анзаараарай: f-string-ийн доторх {price*qty}. black f-string-ийн доторх илэрхийллийг хэлбэржүүлдэггүй, учир нь тэр нь текстийн нэг хэсэг гэж үздэг.
Алхам 4: Хэлбэржүүлэх
Command:
black messy.pyГаралт:
reformatted messy.py
All done!
1 file reformatted.“reformatted messy.py” нь “messy.py-г хэлбэржүүллээ” гэсэн утгатай. “would” үг алга: энэ удаад файл үнэхээр өөрчлөгдсөн. VS Code-д messy.py-г хараарай: Алхам 3-ын “+” мөрүүдтэй яг ижил болсон байна. Нэг ч товч дараагүй, нэг ч зай гараар засаагүй.
Алхам 5: Утга өөрчлөгдөөгүйг батлах
Command:
python messy.pyГаралт:
{'total': 16500, 'lines': ['талх: 4000', 'сүү: 3000', 'өндөг: 5000', 'ус: 3000'], 'count': 4}Алхам 2-той яг ижил. black хэлбэрийг өөрчилсөн, утгыг биш. Энэ бол санамсаргүй таарсан зүйл биш, black-ийн баталгаа: хэлбэржүүлсний дараа black шинэ кодыг Python-ий задлагчаар уншиж, хуучинтайгаа ижил утгатай эсэхийг өөрөө шалгадаг. Хэрвээ ялгаа олдвол файлыг өөрчлөхгүй, алдаа мэдэгддэг. Тиймээс black-ийг ажиллуулахаас айх шаардлагагүй.
Алхам 6: Дахин ажиллуулах
Command:
black messy.pyГаралт:
All done!
1 file left unchanged.“1 file left unchanged” нь “1 файл өөрчлөгдөөгүй үлдлээ” гэсэн утгатай. Хэлбэржсэн кодыг black дахин хэлбэржүүлэхэд юу ч өөрчлөгдөхгүй. Энэ шинжийг idempotent буюу дахин хэрэглэхэд үр дүн өөрчлөгддөггүй гэж нэрлэдэг бөгөөд хэрэгсэл найдвартай гэдгийг харуулна: та хэдэн удаа ч ажиллуулсан, үр дүн нэг.
Төгсгөлийн таслалын нууц
Алхам 3-т black dictionary-ийн сүүлийн элементийн ард таслал нэмсэн: "count": len(items),. Энэ илүү таслал яагаад? black-д “magic trailing comma” буюу ид шидийн төгсгөлийн таслал гэсэн дүрэм бий: хэрвээ жагсаалт, dictionary, функцийн аргументын төгсгөлд таслал байвал black түүнийг мөр бүрт нэг элементтэйгээр, босоогоор хэлбэржүүлдэг. Харин таслалгүй бөгөөд нэг мөрөнд багтах бол нэг мөрөнд үлдээнэ.
Энэ нь танд хяналтын жижиг хэрэгсэл өгдөг. Хэрвээ богино жагсаалтыг ч босоогоор харуулахыг хүсвэл төгсгөлд нь таслал тавиад black ажиллуул. Мөн босоо хэлбэрийн давуу тал бий: шинэ элемент нэмэхэд diff-д зөвхөн нэг шинэ мөр гарна, учир нь өмнөх мөрийн таслал аль хэдийн байгаа. 2.3 дугаар хичээлийн diff-ийг уншихад ийм цэвэр өөрчлөлт ойлгоход хялбар.
Бүхэл төслийг хэлбэржүүлэх
black-д файлын оронд фолдер өгвөл доторх бүх Python файлыг хэлбэржүүлнэ. Цэг нь 2.1 дүгээр хичээлээс таньж байгаагаар одоогийн фолдер. Хамгийн түрүүнд --check-ээр юу өөрчлөгдөхийг харъя.
Command:
black --check .Гаралт:
would reformat C:\Users\Bat\pytest-dadlaga\tests\test_prices.py
Oh no!
1 file would be reformatted, 10 files would be left unchanged.“--check” горим “--diff”-ээс ч хялбар: юу ч хэвлэхгүй, файлд хүрэхгүй, зөвхөн аль файлууд хэлбэржих ёстойг жагсаана. “Oh no!” гэсэн мөр black-ийн "асуудал олдлоо" гэсэн өнгөтэй илэрхийлэл, түүний ард ч чимэглэл бий. Нэг файл: test_prices.py. Бусад арван файл аль хэдийн black-ийн хэлбэрт нийцэж байна, учир нь бид энэ сургалтын туршид цэвэр хэлбэрээр бичсэн. Таны файлуудын тоо, жагсаалт өмнөх хичээлүүдийн "туршаад үзээрэй" хэсгүүдээс хамаараад өөр байж болно. venv фолдер жагсаалтад байхгүйг анзаараарай: black анхдагчаар venv, .venv зэрэг фолдеруудыг алгасдаг, мөн .gitignore-ийг уншдаг.
test_prices.py яагаад? Бодоод үзээрэй: 8.4 дүгээр хичээлд apply_discount-ийг import мөрөнд нэмсэн. Тэр мөр одоо маш урт болсон. Одоо хэлбэржүүлье.
Command:
black .Гаралт:
reformatted C:\Users\Bat\pytest-dadlaga\tests\test_prices.py
All done!
1 file reformatted, 10 files left unchanged.test_prices.py-ийн дээд хэсгийг хараарай.
python
import pytest
from prices import (
add_vat,
add_vat_exact,
apply_discount,
format_price,
is_free,
prices_with_vat,
)black урт import мөрийг хаалтанд хийж, нэр бүрийг тусдаа мөрөнд хуваасан. black-ийн анхдагч мөрийн хамгийн их урт 88 тэмдэгт бөгөөд түүнээс урт мөрийг black боломжтой бол хуваадаг.
Command:
pytestГаралт (сүүлийн мөр):
============================= 39 passed in 0.07s ==============================Хэлбэржүүлэлтийн дараа бүх тест давсаар байна. Энэ дараалал, black, дараа нь pytest, бол сайн дадал: black утгыг өөрчлөхгүй гэдэгт баталгаа өгдөг ч тест ажиллуулах нь хэдхэн секунд.
Хэлбэржүүлэлтийг тусад нь commit хийх
Бодит төсөлд black-ийг анх удаа хэрэглэхэд олон файл өөрчлөгдөж болно. Хэрвээ тэр өөрчлөлтүүдийг программын логикийн өөрчлөлттэй нэг commit-д хийвэл diff хэлбэрийн өөрчлөлтөөр дүүрч, жинхэнэ өөрчлөлт нуугдана: reviewer зуун мөр хашилтын өөрчлөлтийн дунд ганц логикийн мөрийг хайх хэрэгтэй болно. Тиймээс хэлбэржүүлэлтийг үргэлж тусдаа commit хий, жишээ нь “Format code with black” гэсэн message-тэй. 2.2 дугаар хичээлийн "нэг commit нэг утга бүхий өөрчлөлт" дүрмийн шууд хэрэглээ.
VS Code-ийг хадгалах үед хэлбэржүүлэх
black-ийг command-аар ажиллуулахаас гадна VS Code файл хадгалах бүрт автоматаар ажиллуулж болно. Үүний тулд Microsoft-ын “Black Formatter” өргөтгөл хэрэгтэй. 10.2 дугаар хичээлийн аргаар Extensions самбараас “Black Formatter”-ийг хайж, нийтлэгч нь Microsoft эсэхийг шалгаад суулгана уу. Дараа нь Ctrl+Shift+P дарж “Preferences: Open User Settings (JSON)”-ийг сонгоод, нээгдсэн файлын “{” ба “}” дотор дараах мөрүүдийг нэмнэ үү, бусад тохиргооны хооронд таслал байх ёстойг анхаараарай.
json
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true
}Үүний дараа Python файл хадгалах бүрт Ctrl+S дармагц black автоматаар хэлбэржүүлнэ. Олон хөгжүүлэгч ингэж ажилладаг: хэлбэрийн тухай огт бодолгүй бичиж, хадгалахад код цэвэр болно. Энэ бол сонголт, гэхдээ дадал болсны дараа хэлбэрийн тухай бодох шаардлага бүрэн алга болдог. Өргөтгөлийн тохиргооны нэр VS Code-ийн хувилбараас хамаараад бага зэрэг өөр байж болно.
Тохиргооны тухай нэг шударга үг
black цөөн тохиргоотой, тэдгээрийн хамгийн их хэрэглэгддэг нь мөрийн урт. Төслийн pyproject.toml файлд [tool.black] хэсэг нэмж, line-length = 100 гэх мэтээр өөрчилж болно. Гэхдээ энэ сургалт анхдагч тохиргоог ашиглахыг зөвлөж байна. black-ийн гол санаа нь хэлбэрийн тухай шийдвэр гаргахаас чөлөөлөх: тохиргоог өөрчлөх тухай ярилцах нь яг тэр маргааныг шинэ хэлбэрээр эхлүүлнэ. Анхдагч 88 тэмдэгт бол олон мянган төсөлд ажилладаг, бодож гаргасан тоо.
Хүсвэл зарлагын бүртгэлдээ black-ийг туршаад үзээрэй. Тэр төслийн фолдерт venv-ээ идэвхжүүлж, black суулгаад, эхлээд black --check . ажиллуулж, аль файлууд хэлбэржих ёстойг харцгаа. Дараа нь black --diff .-ээр өөрчлөлтүүдийг уншаад, хүлээн зөвшөөрч байвал black ., дараа нь pytest. Хэрвээ ямар нэг файл өөрчлөгдсөн бол Түвшин 1, 2-ын дадлаар шинэ салаа, “Format code with black” commit, pull request хийж болно. Мөн requirements-dev.txt-д “black” мөр нэмээрэй.
black танигдахгүй байх. “black : The term ‘black’ is not recognized...” гэсэн мессеж 7.2 дугаар хичээлийн pytest-ийн асуудалтай яг ижил: venv идэвхгүй эсвэл black энэ venv-д суугаагүй. Мөрийн эхний “(venv)”-ийг шалгаад, Алхам 1-ийг давтана уу. Мөн python -m black хэлбэр PATH-ийн асуудлыг тойрдог.
Синтаксийн алдаатай файл. black зөвхөн хүчинтэй Python кодыг хэлбэржүүлж чадна. Хэрвээ файлд синтаксийн алдаа байвал, жишээ нь хаалт дутуу, black дараах мэт мессеж гаргана.
error: cannot format messy.py: Cannot parse for target version Python 3.13: 3:4: lines=[ f"{name}: {price*qty}" for name,price,qty in items
Oh no!
1 file failed to reformat.“cannot format messy.py: Cannot parse” нь “messy.py-г хэлбэржүүлж чадсангүй: задлах боломжгүй” гэсэн утгатай. “3:4” нь 3 дугаар мөрийн 4 дүгээр багана, араас нь тэр мөрийн код. “1 file failed to reformat” нь “1 файл хэлбэржүүлэхэд бүтэлгүйтсэн”. black файлд хүрээгүй. Эхлээд синтаксийн алдааг засаарай: python messy.py ажиллуулбал Python өөрөө SyntaxError-ийг илүү дэлгэрэнгүй харуулна. Мессежийн Python-ий хувилбар болон байрлалын бичлэг black-ийн хувилбараас хамаараад бага зэрэг өөр байж болно.
Буруу фолдерт black . ажиллуулах. Хэрвээ хэрэглэгчийн фолдерт байхдаа black . ажиллуулбал black олон төслийн бүх Python файлыг хэлбэржүүлэх гэж оролдоно. Ажиллуулахаас өмнө pwd-ээр байршлаа шалгах дадал, 2.1 дүгээр хичээлийн "буруу газар git init" анхааруулгатай ижил. Хэрвээ санамсаргүй ажиллуулсан бол Git тань аврагч: repository бүрт git diff-ээр өөрчлөлтийг харж, хүсэхгүй бол 2.5 дугаар хичээлийн git restore .-ээр буцаана. Commit хийгдсэн бүх зүйл аюулгүй.
Хэлбэр ба логикийг нэг commit-д холих. Дээр ярьсанчлан хэлбэржүүлэлтийн өөрчлөлт жинхэнэ өөрчлөлтийг нууна. Хэрвээ ажиллаж байхдаа хадгалах үед автомат хэлбэржүүлэлт асаалттай бөгөөд хуучин, хэлбэржээгүй файлд жижиг засвар хийвэл файл бүхэлдээ өөрчлөгдөж магадгүй. Ийм үед эхлээд зөвхөн хэлбэржүүлэлтийг тусад нь commit хийгээд, дараа нь засвараа хийгээрэй.
black ба гараар засах хоорондын "тулаан". Хэрвээ та black-ийн хэлбэрийг гараар өөрчилж, дараа нь black дахин буцааж өөрчилбөл энэ нь black-тэй маргаж байгаа хэрэг. black ялна. Хэрвээ black-ийн аль нэг хэлбэр танд үнэхээр уншигдахгүй санагдвал magic trailing comma, эсвэл кодыг жижиг хэсгүүдэд хуваах, урт илэрхийллийг нэртэй хувьсагчид онооно гэх мэт кодын бүтцийн өөрчлөлтөөр шийд, хэлбэрийн гараар засвараар биш.
black бол кодын хэлбэр загварыг автоматаар нэг стандартад оруулдаг, бараг тохиргоогүй formatter бөгөөд хэлбэрийн тухай шийдвэр, маргааныг бүрэн арилгадаг. Түүнийг venv-д pip install black-ээр хөгжүүлэлтийн хэрэгсэл болгон суулгана. black --diff файл өөрчлөлтийг файлд хүрэлгүй diff хэлбэрээр харуулдаг, black --check . хэлбэржих ёстой файлуудыг жагсаадаг, black файл эсвэл black . хэлбэржүүлдэг. black зай, хашилт, мөрийн урт (анхдагч 88), хоосон мөрийг стандартчилдаг ч f-string-ийн дотор хүрдэггүй. black утгыг хэзээ ч өөрчилдөггүй: хэлбэржүүлсний дараа өөрөө шалгадаг, мөн дахин ажиллуулахад юу ч өөрчлөгддөггүй. Төгсгөлийн таслал black-ийг босоо хэлбэр рүү чиглүүлдэг. black venv-ийг алгасаж, .gitignore-ийг уншдаг. Хэлбэржүүлсний дараа тест ажиллуулж, хэлбэржүүлэлтийг тусдаа commit хийнэ. VS Code-ийн Black Formatter өргөтгөл хадгалах бүрт автоматаар хэлбэржүүлдэг. Анхдагч тохиргоог хадгалах нь black-ийн гол санаанд нийцнэ.
Дараагийн хичээлд black-ийн хамтрагч хэрэгслийг сурна: ruff. black кодын хэлбэрт анхаардаг бол ruff кодын агуулгад анхаарч, ашиглагдаагүй import, тодорхойлогдоогүй нэр, байж болзошгүй алдаа зэргийг олдог. Түүний бодит анхааруулгуудыг монголоор уншиж, засна.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.