أوامر إعادة الهيكلة مع أقفال سلامة الأنواع
ليه الـ refactors بتـregress بصمت
الـ refactor المفروض يغيّر الكود من غير ما يغيّر السلوك. التعريف ده هو الفخ. لما تطلب من LLM "نضّف الـ function دي،" يقدر — وغالباً بيعمل — يغيّر السلوك وهو بيحسّن الوضوح. النسخة الجديدة بتتجمّع، الـ test suite لسه بيعدّي، وedge case بقى غلط. مش هتلاحظ لحد ما production يقولك.
3 طرق كلاسيكية بيـregress بيها refactor بـLLM في الهدوء:
| نوع الفشل | شكله إيه |
|---|---|
| Types مرتخية | الكود الأصلي بياخد string. الـ refactor بياخد string | undefined. دلوقتي null من فوق بيعدّي مكان كان بيرمي exception. |
| Exception handling مرتب غلط | الكود الأصلي بيرمي قبل أي side-effect. الـ refactor بينقل الـ side-effect الأول، وسايب النظام في حالة جزئية على الفشل. |
| Default values مضافة | الكود الأصلي طالب size تتمرّر. الـ refactor بيضيف size = 10 كـ default. الـ callers الجداد بياخدوا page size غلط في الهدوء. |
ولا واحدة من دول بتكسر tests لو الـ test suite ما بيغطّيش الـ boundary. ولا واحدة منها واضحة في code review لو الـ diff كبير. كل واحدة منها بالظبط نوع "التحسين" اللي LLM بيعمله بكل سرور لما تقول "refactor this for clarity."
تدفق الـ module ده:
Refactor من غير قفل مقابل refactor مقفول:
الحل إنك تكتب refactor prompts كـ constraint-locked transformations. ما تقولش "حسّن ده." قول "اعمل التحويل ده بالظبط مع الحفاظ على الخصايص دي بالظبط." الخصايص دي بتبقى أقفال الموديل مش هيقدر يفتحها.
أقفال شائعة مهمة للـ refactors:
- Public signature ما يتغيّرش. اسم الـ function، أسامي الـ parameters، أنواعها، نوع الـ return — كلهم زي ما هم.
- Error semantics محفوظة. نفس exception types، نفس الظروف، نفس الرسائل.
- مفيش dependencies جديدة. مفيش imports جديدة، مفيش packages جديدة.
- مفيش defaults جديدة. لو parameter كان مطلوب، يفضل مطلوب.
- Idempotency محفوظة. لو الـ function كانت idempotent، تفضل كده.
هتشوف الدرس الجاي بيستخدم الأقفال دي بالظبط على refactor JavaScript-لـ-TypeScript. الموديل هيشدّ الـ types من غير ما يرتخي ولا واحد منها. الـ lock list هي اللي بتشتغل — مش حكم الموديل.
صياغة مفيدة: refactor prompt أقرب لـ contract منه لـ request. مش بتطلب من الموديل ياخد قرارات عن إيه أحسن. إنت بتسلّمه list من الخصايص لازم تثبت وبتطلب منه يطلّع كود بيثبّتها. الموديل كويس في اتباع contracts. وحش في "use your judgement."
ده ليه الـ refactors بتكسر أكتر لما المهندسين بيستخدموا أبسط prompts — "tidy this up,"، "make this cleaner،" "modernize this." كل كلمة عابرة بتسيب مساحة للموديل "يحسّن" حاجة كانت load-bearing.
التالي: نمط type-safety lock بالتفصيل. :::
سجّل الدخول للتقييم