أوامر الكود: مهمة جاهزة لكل لغة برمجة

كتابة كود بالذكاء الاصطناعي بأي لغة برمجة: ست عشرة مهمة تسلّمها للمولّد كما هي، وكل واحدة تحدد اللغة وإصدارها، وهل يدخل إطار عمل في الأمر، وإلى أي مدى تُعالَج الأخطاء — بدّل أسماء حقولك، اضغط «تطبيق» واقرأ الكود.

دوال وأدوات يومية

الأشياء الصغيرة التي تُكتب من جديد في كل مشروع: دالة تحويل العنوان إلى رابط لطيف، وتنسيق مبلغ مالي، والتحقق من صحة حقل في نموذج، وحساب أيام العمل بين تاريخين مع العطل الرسمية.

رابط لطيف من العنوان

يحوّل عنوان المقال إلى رابط نظيف: حروف صغيرة، شرطات، ولا شيء يحتاج ترميزًا.

الطلب

اكتب دالة بلغة 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"));}

أوامر مولّد الأكواد: 16 مهمة جاهزة لكل لغة برمجة | iBro