ข้ามไปยังเนื้อหา

Python ที่ TypeScript ไม่มี

TypeScript เป็น superset ของ JavaScript คือเติม type เข้ามา แต่ runtime ยังเป็น JS ตัวเดิม ส่วน Python ออกแบบขึ้นใหม่ตั้งแต่ต้นบนปรัชญาคนละแบบ นั่นคือโค้ดควรอ่านได้เหมือน pseudocode ที่รันได้จริง ผลลัพธ์คือภาษาที่มีแนวคิดหลายอย่างซึ่งหาคู่เทียบฝั่ง TypeScript หรือ JavaScript ไม่ได้เลย

โมดูลนี้จะพาไปดูสิบ concept เหล่านั้น:

  1. Significant whitespace — การย่อหน้าคือ syntax ไม่ใช่แค่ลวดลาย
  2. Duck typing และ EAFP — รองรับ behavior โดยไม่ต้องประกาศ interface พร้อมกับรูปแบบการจัดการ error แบบลองก่อนแล้วค่อยแก้
  3. Dunder methods — การ overload operator ผ่าน __add__, __str__ และเพื่อนๆ
  4. Decorators — function wrapper ชั้นหนึ่ง ถูกใช้อย่างหนักในเฟรมเวิร์กอย่าง FastAPI
  5. Comprehensions — สร้าง list, dict และ set แบบกระชับในบรรทัดเดียว
  6. Generators และ yield — sequence แบบ lazy ที่ผลิตค่าตามต้องการ
  7. Unpacking, *args, **kwargs — signature ของฟังก์ชันที่ยืดหยุ่น และการ destructure iterable
  8. Context managers — บล็อก with ที่รับประกันการจัดการ resource อย่างถูกต้อง
  9. Slicing — syntax สำหรับตัด subsequence จาก list, string และอื่นๆ
  10. GIL — Global Interpreter Lock และผลกระทบต่อ concurrency

ความแตกต่างที่เห็นได้ชัดที่สุดระหว่าง TypeScript กับ Python คือ syntax TypeScript สืบทอดสไตล์ C ของ JavaScript ด้วย braces และ semicolons ส่วน Python ไม่มีทั้งสองอย่าง

TypeScript
// TypeScript: braces and semicolons everywhere
function greet(name: string): string {
if (name) {
return `Hello, ${name}!`;
} else {
return "Hello, stranger!";
}
}
const items: number[] = [1, 2, 3];
for (const item of items) {
console.log(item);
}
Python
# Python: indentation defines blocks
def greet(name: str) -> str:
if name:
return f"Hello, {name}!"
else:
return "Hello, stranger!"
items: list[int] = [1, 2, 3]
for item in items:
print(item)
# A taste of Python's feel
def describe(value):
if isinstance(value, int):
print(f"{value} is an integer")
elif isinstance(value, str):
print(f'"{value}" is a string')
elif isinstance(value, list):
print(f"{value} is a list with {len(value)} items")
else:
print(f"{value} is something else")
describe(42)
describe("hello")
describe([1, 2, 3])
describe(3.14)
# Python reads like prose
numbers = [1, 2, 3, 4, 5]
evens = [n for n in numbers if n % 2 == 0]
print(f"Even numbers: {evens}")
Python ใช้ concept อะไรแทน curly braces สำหรับกำหนด code block?
"batteries included" ในบริบทของ Python หมายความว่าอย่างไร?
ข้อใดต่อไปนี้เป็น concept เฉพาะของ Python ที่ไม่มีคู่เทียบตรงๆ ใน TypeScript?
อ่าน Zen of Python ได้ที่ไหน?