Python ที่ TypeScript ไม่มี
ดินแดนที่มีแค่ Python
หัวข้อที่มีชื่อว่า “ดินแดนที่มีแค่ Python”TypeScript เป็น superset ของ JavaScript คือเติม type เข้ามา แต่ runtime ยังเป็น JS ตัวเดิม ส่วน Python ออกแบบขึ้นใหม่ตั้งแต่ต้นบนปรัชญาคนละแบบ นั่นคือโค้ดควรอ่านได้เหมือน pseudocode ที่รันได้จริง ผลลัพธ์คือภาษาที่มีแนวคิดหลายอย่างซึ่งหาคู่เทียบฝั่ง TypeScript หรือ JavaScript ไม่ได้เลย
โมดูลนี้จะพาไปดูสิบ concept เหล่านั้น:
- Significant whitespace — การย่อหน้าคือ syntax ไม่ใช่แค่ลวดลาย
- Duck typing และ EAFP — รองรับ behavior โดยไม่ต้องประกาศ interface พร้อมกับรูปแบบการจัดการ error แบบลองก่อนแล้วค่อยแก้
- Dunder methods — การ overload operator ผ่าน
__add__,__str__และเพื่อนๆ - Decorators — function wrapper ชั้นหนึ่ง ถูกใช้อย่างหนักในเฟรมเวิร์กอย่าง FastAPI
- Comprehensions — สร้าง list, dict และ set แบบกระชับในบรรทัดเดียว
- Generators และ
yield— sequence แบบ lazy ที่ผลิตค่าตามต้องการ - Unpacking,
*args,**kwargs— signature ของฟังก์ชันที่ยืดหยุ่น และการ destructure iterable - Context managers — บล็อก
withที่รับประกันการจัดการ resource อย่างถูกต้อง - Slicing — syntax สำหรับตัด subsequence จาก list, string และอื่นๆ
- GIL — Global Interpreter Lock และผลกระทบต่อ concurrency
ความรู้สึก: braces กับ whitespace
หัวข้อที่มีชื่อว่า “ความรู้สึก: braces กับ whitespace”ความแตกต่างที่เห็นได้ชัดที่สุดระหว่าง TypeScript กับ Python คือ syntax TypeScript สืบทอดสไตล์ C ของ JavaScript ด้วย braces และ semicolons ส่วน Python ไม่มีทั้งสองอย่าง
// TypeScript: braces and semicolons everywherefunction 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: indentation defines blocksdef 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 feeldef 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 prosenumbers = [1, 2, 3, 4, 5]evens = [n for n in numbers if n % 2 == 0]print(f"Even numbers: {evens}")Loading Python runtime (first run only)…