تصحيح الكود المُنتج بالذكاء الاصطناعي
الأخطاء الشائعة وكيفية إصلاحها
5 دقيقة للقراءة
مساعدي البرمجة بالذكاء الاصطناعي يرتكبون أخطاء متوقعة. معرفة هذه الأنماط تساعدك على اكتشاف وإصلاح المشاكل بسرعة.
الفئة 1: أخطاء معالجة البيانات
خطأ: تحليل JSON غير آمن
// مُنتج بالـ AI
function loadConfig(): Config {
const data = fs.readFileSync('config.json', 'utf-8');
return JSON.parse(data);
}
المشاكل:
- الملف قد لا يكون موجوداً
- الملف قد لا يكون JSON صالح
- لا تحقق من النوع في وقت التشغيل
الإصلاح:
import { z } from 'zod';
const ConfigSchema = z.object({
apiKey: z.string(),
port: z.number(),
debug: z.boolean().default(false),
});
function loadConfig(): Config {
try {
const data = fs.readFileSync('config.json', 'utf-8');
return ConfigSchema.parse(JSON.parse(data));
} catch (error) {
if (error instanceof z.ZodError) {
throw new Error(`إعداد غير صالح: ${error.message}`);
}
throw new Error('فشل في تحميل ملف الإعداد');
}
}
خطأ: افتراض وجود عناصر المصفوفة
// مُنتج بالـ AI
function getFirstUser(users: User[]): string {
return users[0].name;
}
الإصلاح:
function getFirstUser(users: User[]): string | null {
return users[0]?.name ?? null;
}
الفئة 2: أخطاء Async/Promise
خطأ: نسيان Await
// مُنتج بالـ AI
async function processData() {
const data = fetchData(); // await مفقود!
return transform(data);
}
الإصلاح:
async function processData() {
const data = await fetchData();
return transform(data);
}
خطأ: forEach مع Async
// مُنتج بالـ AI
async function sendEmails(users: User[]) {
users.forEach(async (user) => {
await sendEmail(user.email);
});
console.log('تم إرسال جميع الإيميلات'); // كذب! لم تنتهِ فعلاً
}
الإصلاح:
async function sendEmails(users: User[]) {
await Promise.all(users.map(user => sendEmail(user.email)));
console.log('تم إرسال جميع الإيميلات');
}
الفئة 3: أخطاء إدارة الحالة
خطأ: Closure قديم
// مُنتج بالـ AI (React)
function Counter() {
const [count, setCount] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setCount(count + 1); // يستخدم دائماً القيمة الأولية!
}, 1000);
return () => clearInterval(interval);
}, []);
return <div>{count}</div>;
}
الإصلاح:
function Counter() {
const [count, setCount] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setCount(prev => prev + 1); // استخدم دالة التحديث
}, 1000);
return () => clearInterval(interval);
}, []);
return <div>{count}</div>;
}
الفئة 4: أخطاء الأمان
خطأ: كشف البيانات الحساسة في السجلات
// مُنتج بالـ AI
async function login(email: string, password: string) {
console.log(`محاولة تسجيل دخول: ${email}, ${password}`); // لا تسجل كلمات المرور أبداً!
}
خطأ: عدم تنظيف المدخلات بشكل صحيح
// مُنتج بالـ AI
app.get('/search', (req, res) => {
const query = req.query.q;
res.send(`<h1>نتائج: ${query}</h1>`); // XSS!
});
الإصلاح:
import { escape } from 'html-escaper';
app.get('/search', (req, res) => {
const query = escape(req.query.q || '');
res.send(`<h1>نتائج: ${query}</h1>`);
});
الفئة 5: أخطاء الأداء
خطأ: استعلام N+1
// مُنتج بالـ AI
async function getPostsWithAuthors() {
const posts = await db.post.findMany();
return Promise.all(
posts.map(async (post) => ({
...post,
author: await db.user.findUnique({ where: { id: post.authorId } }),
}))
);
}
الإصلاح:
async function getPostsWithAuthors() {
return db.post.findMany({
include: { author: true },
});
}
مرجع سريع: أنماط إصلاح الأخطاء
| نوع الخطأ | نمط AI | الإصلاح |
|---|---|---|
| await مفقود | const x = asyncFn() |
const x = await asyncFn() |
| forEach async | arr.forEach(async ...) |
await Promise.all(arr.map(...)) |
| Closure قديم | setCount(count + 1) |
setCount(prev => prev + 1) |
| تغيير المصفوفة | arr.sort() |
[...arr].sort() |
| وصول null | obj.prop.value |
obj?.prop?.value |
| XSS | ${userInput} في HTML |
escape(userInput) |
| حقن SQL | Template literals | استعلامات مُعاملة |
حكمة الأخطاء: معظم أخطاء AI تقع في عدد صغير من الفئات. تعلم هذه الأنماط، وستلتقطها في ثوانٍ.
في الدرس التالي، سنغطي استراتيجيات التصحيح ومتى تطلب المساعدة من AI. :::