Middle
პროცედურული სტილის კოდის შეფასების კრიტერიუმები რა შეიძლება იყოს კარგი და რა ცუდი?
sobes.tech AI
პასუხი AI-სგან
კარგი კრიტერიუმები:
- კითხულობა: რამდენად ადვილია להבין, რა აკეთებს კოდი ზევიდან ქვემოთ წაკითხვისას.
- მოსახერხებელი ცვლადებისა და ფუნქციების სახელები: აღწერითი სახელების გამოყენება, რომლებიც ასახავს მათი მიზანს და ლოგიკას.
- დეკომპოზიცია: რთული დავალებების გაყოფა პატარა, მართვად ფუნქციებად. თითოეული ფუნქცია უნდა ასრულებდეს კონკრეტულ დავალებას.
- გლობალური ცვლადების არარსებობა: გლობალური ცვლადების გამოყენების მინიმუმამდე დაყვანა დამოკიდებულებების და გვერდითი ეფექტების შესამცირებლად.
- შეცდომების მართვა: ნათელი და ზუსტი შეცდომებისა და გამონაკლისების მართვა.
- კომენტარები: იქ, სადაც კოდი გაუგებარია ან ლოგიკის ახსნისთვის.
- სტილის თანმიმდევრულობა: ერთიანი სტილი ფორმატირებაში და სახელწოდებაში მთელი პროექტის განმავლობაში.
- კოდში გამეორების მინიმუმამდე დაყვანა: ერთნაირი ან ძალიან მსგავსი ბლოკების გამეორების თავიდან აცილება.
# კარგი მაგალითი დეკომპოზიციისა და ნათელი სახელების
def calculate_average(numbers):
"""სიის საშუალო მნიშვნელობის გამოთვლა."""
if not numbers:
return 0
total = sum(numbers)
return total / len(numbers)
def process_data(data):
# ვივარაუდოთ, რომ 'data' არის სიების სია
averages = []
for row in data:
avg = calculate_average(row)
averages.append(avg)
return averages
ცუდი კრიტერიუმები:
- არასაზღვრული: კოდი რთულად გასაგებია, რადგან ლოგიკა არ არის ნათელი, სახელები არასწორია ან სტრუქტურა არ არის, ან არ არის.
- "სპაგეტი კოდი": ბევრი გადასვლა და დამოკიდებულება, რაც გამორიცხავს შესრულების სერიის თვალსაზრისით.
- "ლიზუნკა"-კოდი: გრძელი, მონოლითური ფუნქციები, რომლებიც ასრულებენ სხვადასხვა, შეუკავშირებელ დავალებებს.
- "მაგიური" რიცხვების გამოყენება: არაპატენტირებული რიცხვითი კონსტანტები კოდში.
- შეცდომების მართვის არარსებობა: პროგრამა "ჩამოიშლება" გაუთვალისწინებელი სიტუაციების დროს.
- კოდის გამეორება: იგივე ან ძალიან მსგავსი ბლოკები მეორდება სხვადასხვა ადგილას.
- სტილის შეუთანხმებლობა: ფორმატირება და სახელწოდება სხვადასხვაა, რაც გამარტივებს წაკითხვას.
# ცუდი მაგალითი "ლიზუნკა" და მაგიური რიცხვებით
def process(d):
t = 0
for r in d:
s = 0
c = 0
for n in r:
s += n
c += 1
if c > 0:
t += s / c
return t / len(d) if len(d) > 0 else 0
შედარება:
| კარგი | ცუდი |
|---|---|
| კითხვა-წაკითხვა | არაზუსტი ("სპაგეტი", "ლიზუნკა") |
| ნათელი სახელები | გაუგებარი სახელები |
| დეკომპოზიცია | მონოლითური ფუნქციები |
| გლობალური ცვლადების არარსებობა | ზედმეტი გლობალური ცვლადების გამოყენება |
| ნათელი შეცდომების მართვა | შეცდომების მართვის არარსებობა |
| კომენტარები საჭირო ადგილებში | კომენტარები არ არის |
| სტილის თანმიმდევრულობა | შეუთანხმებელი სტილი |
| კოდის გამეორების მინიმუმამდე დაყვანა | კოდის გამეორება |