أوامر الكود: مهمة جاهزة لكل لغة برمجة
كتابة كود بالذكاء الاصطناعي بأي لغة برمجة: ست عشرة مهمة تسلّمها للمولّد كما هي، وكل واحدة تحدد اللغة وإصدارها، وهل يدخل إطار عمل في الأمر، وإلى أي مدى تُعالَج الأخطاء — بدّل أسماء حقولك، اضغط «تطبيق» واقرأ الكود.
دوال وأدوات يومية
الأشياء الصغيرة التي تُكتب من جديد في كل مشروع: دالة تحويل العنوان إلى رابط لطيف، وتنسيق مبلغ مالي، والتحقق من صحة حقل في نموذج، وحساب أيام العمل بين تاريخين مع العطل الرسمية.
رابط لطيف من العنوان
يحوّل عنوان المقال إلى رابط نظيف: حروف صغيرة، شرطات، ولا شيء يحتاج ترميزًا.
اكتب دالة بلغة JavaScript تحوّل عنوان المقال إلى رابط URL: حروف صغيرة، المسافات تصبح شرطات، العلامات التشكيلية تُزال، علامات الترقيم تُحذف، ولا تبقى شرطة في الطرفين. من دون أي اعتماديات.
export function slugify(title) { // التطبيع يفصل الحرف عن علامته، والعلامة تُحذف — في الرابط لن يبقى منها سوى رموز %C3 const base = title.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase() return base.replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "")}
تنسيق مبلغ مالي
فاصل الآلاف ورقمان بعد الفاصلة والعملة، مع تقريب يسبق التنسيق لا يتبعه.
اكتب دالة بلغة Python تعرض قيمة Decimal كمبلغ مالي: 1234.5 تصبح 1,234.50 SAR. قرّب إلى الهللات أولًا ولا تقرّب على عدد عشري عائم، واسمح بتمرير رمز عملة آخر.
def format_money(amount: Decimal, currency: str = "SAR") -> str: # نقرّب إلى الهللات قبل التنسيق: على الأعداد العشرية العائمة تضيع الهللة الأخيرة value = amount.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP) return locale.format_string("%.2f", value, grouping=True) + " " + currency
التحقق من حقل في نموذج
تعبير نمطي للبريد ورقم الهاتف، ومعه سطر التحقق الذي يستخدمه فعلًا.
اكتب تعبيرات نمطية للتحقق من البريد الإلكتروني ورقم جوال سعودي في نموذج التسجيل، مع دالة تحقق قصيرة لكل منهما. اشرح كل جزء من النمط حتى أستطيع تعديله.
const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[a-z]+$/i// في المتصفح نتحقق من الشكل فقط — أما وجود العنوان فيثبته بريد التأكيدexport const isEmail = (value) => EMAIL_RE.test(value.trim().toLowerCase())
أيام العمل بين تاريخين
العطل الأسبوعية والرسمية مطروحة، واستثناء إذا وصل التاريخان مقلوبين.
اكتب دالة بلغة PHP 8.3 تحسب أيام العمل بين تاريخين: تخطَّ الجمعة والسبت وأي تاريخ في مصفوفة العطل الرسمية. وارمِ استثناءً إذا كان تاريخ النهاية أسبق من تاريخ البداية.
function workingDays(DateTimeImmutable $from, DateTimeImmutable $to, array $holidays = []): int{ $period = new DatePeriod($from, new DateInterval("P1D"), $to); $isWork = fn (DateTimeImmutable $d) => (int) $d->format("N") < 6 && !in_array($d->format("Y-m-d"), $holidays, true); return count(array_filter(iterator_to_array($period), $isWork));}
البيانات وواجهات API
الحديث مع خدمة غيرك ومع قاعدة بياناتك: كود استدعاء API مع إعادة المحاولة عند انتهاء المهلة، واستيراد ملف CSV أعوج الأعمدة، واستعلام تقرير يجمع أرقام الشهر، وقائمة مقسّمة إلى صفحات.
نداء API مع إعادة المحاولة
مهلة زمنية، وإعادة محاولة عند 5xx، وتوقف حاسم: خدمة بطيئة واحدة يجب ألا تعلّق الطلب كله.
اكتب دالة بلغة TypeScript تنادي واجهة HTTP بمهلة أربع ثوانٍ وثلاث محاولات على الأكثر. أعد المحاولة عند 5xx وأخطاء الشبكة فقط، ولا تعدها أبدًا عند 4xx، وانتظر بين المحاولات، وارمِ خطأ مُعرّف النوع عند نفادها.
export async function fetchWithRetry(url: string, tries = 3): Promise<Response> { const res = await fetch(url, { signal: AbortSignal.timeout(4000) }) if (res.ok || res.status < 500 || tries === 1) return res await new Promise((r) => setTimeout(r, 400)) return fetchWithRetry(url, tries - 1)}
استيراد ملف CSV أعوج
يقرأ قائمة أسعار المورّد ويضع الأسطر التالفة في ملف خاص بها بدل أن يتوقف.
اكتب سكربت Python مع pandas يستورد قائمة أسعار مورّد من ملف CSV: الأسعار تصل كنص وبعض الأسطر بلا سعر أصلًا. ضع الأسطر التالفة في rejected.csv، واحذف التكرارات حسب order_id، وأبقِ الباقي.
orders = pd.read_csv("orders.csv", sep=",", decimal=".", on_bad_lines="warn")orders["total"] = pd.to_numeric(orders["total"], errors="coerce")bad = orders["total"].isna()orders.loc[bad].to_csv("rejected.csv", index=False)clean = orders.loc[~bad].drop_duplicates(subset="order_id")
استعلام تقرير
الإيرادات حسب العميل والشهر، مكتوبة على المخطط الذي تلصقه في حقل البيانات.
اكتب استعلام PostgreSQL على المخطط أعلاه: الإيرادات حسب العميل والشهر خلال السنة الماضية، من الأكبر إلى الأصغر، مع استبعاد العملاء الذين لم يطلبوا شيئًا.
SELECT c.name, date_trunc('month', o.created_at) AS month, sum(o.total) AS revenueFROM orders oJOIN customers c ON c.id = o.customer_idWHERE o.created_at >= now() - interval '1 year'GROUP BY 1, 2ORDER BY revenue DESC
قائمة مقسّمة إلى صفحات
ترقيم بالمؤشر: النوع الذي لا يكرر السطور عندما تصل عناصر جديدة أثناء التمرير.
اكتب دالة TypeScript مع Prisma تعيد صفحة من المنشورات المنشورة بترقيم بالمؤشر: عشرون في المرة، الأحدث أولًا، مع nextCursor يعيده العميل لطلب الصفحة التالية.
const page = await prisma.post.findMany({ where: { published: true }, orderBy: { createdAt: "desc" }, cursor: cursorId ? { id: cursorId } : undefined, take: 20,})
الواجهة
أجزاء الشاشة التي هي في الحقيقة كود: كتابة خطّاف React جاهز لإعادة الاستخدام، وشبكة بطاقات مرنة تصمد على الهاتف، وشاشة قائمة داخل تطبيق جوال تعرض بيانات من الخادم.
خطّاف React
يؤخّر ما يُكتب في حقل البحث كي لا تُعاد القائمة مع كل حرف.
اكتب خطّاف React مُعرّف الأنواع يؤخّر القيمة 300 مللي ثانية وينظّف مؤقّته عند الإزالة، مع سطرين يوضحان كيف يستخدمه حقل بحث.
export function useDebounced(value: string, delay = 300) { const [out, setOut] = useState(value) useEffect(() => { const id = setTimeout(() => setOut(value), delay) return () => clearTimeout(id) }, [value, delay]) return out}
شبكة بطاقات مرنة
بطاقات الكتالوج تنتقل من أربعة أعمدة إلى عمود واحد بلا استعلام وسائط واحد.
اكتب CSS لشبكة بطاقات الكتالوج: عرض البطاقة 260px على الأقل، والصف يمتلئ بالكامل، والمسافات 16px، بلا استعلامات وسائط. أسماء الأصناف وفق BEM.
.catalog__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 16px;}
شاشة قائمة في التطبيق
قائمة طلبات قابلة للتمرير في Jetpack Compose، مع نقرة على السطر وحالة فارغة.
اكتب شاشة Jetpack Compose فيها قائمة طلبات قابلة للتمرير: كل سطر يعرض الرقم والتاريخ والمبلغ، والنقر يفتح الطلب، وعند خلو القائمة تظهر رسالة.
@Composablefun OrderList(orders: List<Order>) { LazyColumn { items(orders) { order -> OrderRow(order, onClick = { openOrder(order.id) }) } }}
سكربتات وأتمتة
كود يعمل من دونك: سكربت نسخ احتياطي ليلي لقاعدة البيانات، وأداة سطر أوامر صغيرة لمهمة تتكرّر يدويًا، ومهمة مجدولة عبر cron تستيقظ في موعدها كل يوم قبل الفجر.
نسخة احتياطية ليلية للقاعدة
يأخذ نسخة، ويسمّي الملف بالتاريخ، ويحذف كل ما تجاوز الشهر.
اكتب سكربت Bash يأخذ نسخة من قاعدة PostgreSQL إلى /backup مع التاريخ في اسم الملف، ويحذف النسخ الأقدم من 30 يومًا، ويتوقف عند أول خطأ. من دون ملاحظات ShellCheck.
#!/usr/bin/env bashset -euo pipefailstamp=$(date +%F)pg_dump --format=custom "$DATABASE_URL" > "/backup/db-$stamp.dump"find /backup -name "db-*.dump" -mtime +30 -delete
أداة سطر أوامر صغيرة
أداة لمرة واحدة: تمرّ على مجلد وتعيد تسمية ملفاته وفق قاعدة.
اكتب أداة سطر أوامر بلغة Go تمرّ على مجلد وتعيد تسمية الصور بتاريخ التقاطها. المجلد يصل كـ flag، ومن دون --apply اعرض فقط ما سيتغير، واكتفِ بالمكتبة القياسية.
func main() { dir := flag.String("dir", ".", "المجلد الذي يضم الصور") flag.Parse() if err := filepath.WalkDir(*dir, renameByShootDate); err != nil { log.Fatal(err) }}
مهمة وفق جدول
تستيقظ السابعة في أيام العمل، تجلب أرقام الأمس وترسلها بالبريد.
اكتب مهمة Node.js تعمل الساعة 07:00 في أيام العمل، تجلب مبيعات الأمس من PostgreSQL، وتحوّلها إلى جدول HTML وترسلها بالبريد إلى فريق المبيعات. سجّل الأخطاء ولا تُسقط العملية.
// السابعة صباحًا في أيام العمل: الأرقام مطلوبة قبل اجتماع الصباحcron.schedule("0 7 * * 1-5", async () => { const rows = await db.query(DAILY_SALES_SQL) await mailer.send({ to: "sales@shop.sa", subject: "مبيعات الأمس", html: render(rows) })})
الاختبارات
اختبارات لكود مكتوب أصلًا: كتابة اختبارات وحدة لدالة موجودة، واختبارات لنقطة نهاية في واجهة API، مع الحالات الطرفية التي تُتخطى بصمت عند كتابتها يدويًا.
اختبارات لدالة
pytest بحالات مُمرّرة كوسائط: صفر، ومبلغ سالب، وNone.
اكتب اختبارات pytest لدالة format_money(amount, currency): صفر، ومبلغ كبير، ومبلغ سالب، ورقمان بعد الفاصلة، وTypeError عند تمرير None. باستخدام parametrize.
@pytest.mark.parametrize("amount,expected", [("0", "0.00"), ("1234.5", "1,234.50")])def test_format_money(amount, expected): assert format_money(Decimal(amount)) == expecteddef test_format_money_rejects_none(): with pytest.raises(TypeError): format_money(None)
اختبارات لنقطة نهاية
اختبارات JUnit على GET وPOST، بما فيها 404 وخطأ التحقق.
اكتب اختبارات JUnit 5 لنقطة النهاية /api/orders: 200 مع جسم لطلب موجود، و404 لمعرّف غير معروف، و400 لحمولة تالفة. تحقق من حقول JSON لا من الحالة وحدها.
@Testvoid returnsNotFoundForUnknownOrder() throws Exception { mockMvc.perform(get("/api/orders/0")) .andExpect(status().isNotFound()) .andExpect(jsonPath("$.error").value("order_not_found"));}