การ Refactor เพื่อเพิ่มความอ่านง่าย
การแยกฟังก์ชันขนาดใหญ่ออกเป็นหน่วยย่อยช่วยเพิ่มทั้งความอ่านง่ายและความเป็น Modularity ในแบบฝึกหัดนี้ จะได้ลอง Refactor ฟังก์ชันให้แตกออกเป็นหน่วยย่อย ฟังก์ชันที่จะ Refactor แสดงไว้ด้านล่าง หมายเหตุ: ในแบบฝึกหัดนี้จะไม่ใช้ Docstring เพื่อประหยัดพื้นที่ แต่ในการใช้งานจริงควรใส่เอกสารประกอบด้วยเสมอ!
def polygon_area(n_sides, side_len):
"""Find the area of a regular polygon
:param n_sides: number of sides
:param side_len: length of polygon sides
:return: area of polygon
>>> round(polygon_area(4, 5))
25
"""
perimeter = n_sides * side_len
apothem_denominator = 2 * math.tan(math.pi / n_sides)
apothem = side_len / apothem_denominator
return perimeter * apothem / 2
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
หลักการวิศวกรรมซอฟต์แวร์ใน Python
คำแนะนำการฝึกหัด
- ย้ายลอจิกการคำนวณ
perimeterไปไว้ในฟังก์ชันpolygon_perimeter - เติมนิยามของฟังก์ชัน
polygon_apothemให้สมบูรณ์ โดยย้ายลอจิกที่เห็นในบริบทมาใส่ โมดูลmathถูก import ไว้ให้แล้ว - นำฟังก์ชันหน่วยย่อยใหม่มาใช้เพื่อเติมนิยามของ
polygon_areaให้สมบูรณ์ - ใช้
polygon_areaที่แยกเป็นหน่วยย่อยแล้วเพื่อคำนวณพื้นที่ของรูปหกเหลี่ยมปกติที่มีด้านยาวด้านละ 10
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
def polygon_perimeter(n_sides, side_len):
return ____
def polygon_apothem(n_sides, side_len):
denominator = ____
return side_len / denominator
def polygon_area(n_sides, side_len):
perimeter = ____
apothem = ____
return perimeter * apothem / 2
# Print the area of a hexagon with legs of size 10
print(____(n_sides=6, side_len=10))