حساب أسطر الكود والتعليقات والأسطر الفارغة
اعرف كم من الملف كود فعلي: تعطي الدالة النموذجية 6 أسطر، منها 4 كود و1 تعليق و1 فارغ، بحسب قواعد التعليق في اللغة التي تختارها. مجاناً في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- اللغة
- Javascript
- إجمالي الأسطر
- 6
- الأسطر الفارغة
- 1
- أسطر التعليقات
- 1
- أسطر الشيفرة
- 4
قيسوا مقطعاً برمجياً أو ملف مصدر كاملاً وفق قواعد التعليقات في لغة البرمجة المختارة. يصنف العداد كل سطر فعلي في فئة واحدة فقط: فارغ أو تعليق أو كود، ويعيد الإجمالي أيضاً. يتعرف على تعليقات السطر والكتلة الشائعة، ويتجاهل علاماتها داخل السلاسل المقتبسة، ويعد السطر الذي يجمع الكود والتعليق سطر كود. وهكذا تحصلون على نتيجة قابلة للتكرار للتقارير والمراجعات وخطط الترحيل والأتمتة.
اختاروا اللغة وحافظوا على نص المصدر
أرسلوا الكود كما هو واختاروا لغته من القائمة المدعومة. الاختيار مهم لأن الرموز نفسها تختلف دلالتها بين البيئات: تبدأ علامة المربع تعليقاً في Python وshell، ويبدأ خطان مائلان تعليقاً في JavaScript وJava، وتستخدم SQL شرطتين، بينما تستخدم HTML علامتين متقابلتين. يطبق العداد جدول اللغة المختارة ولا يخمن من اسم الملف أو محتواه.
تفصل LF وCRLF وعلامة رجوع العربة المنفردة بين الأسطر. ينشئ فاصل نهائي سطراً فعلياً فارغاً، وتمثل السلسلة الفارغة سطراً فارغاً كذلك. لا تحذفوا التعليقات أو تقصوا النص إن كنتم تريدون قياس هذه التفاصيل.
تعيد اللغة غير المدرجة خطأ إدخال بدلاً من تطبيق قاعدة عامة مضللة.
افهموا كيفية تصنيف كل سطر
ينتمي كل سطر فعلي مرة واحدة إلى فئة حصرية. يعد السطر الذي لا يحتوي إلا مسافات أو علامات جدولة فارغاً، إلا إذا كان داخل تعليق كتلة مفتوح. ويعد السطر الذي يحتوي تعليقاً فقط سطر تعليق.
أما وجود أي عنصر كود فيجعله سطر كود حتى مع تعليق في نهايته أو وسطه. لذلك يساوي مجموع الفئات الثلاث الإجمالي دائماً. يظل تعليق الكتلة فعالاً حتى علامة الإغلاق؛ وإذا ظهر كود قبل الفتح أو بعد الإغلاق صار السطر سطر كود.
يتابع الماسح علامات الاقتباس المفردة والمزدوجة والخلفية ومحارف الهروب. لذلك يبقى عنوان URL الذي يحوي خطين مائلين أو سلسلة فيها علامة مربع كوداً. القياس للأسطر الفعلية لا للتعليمات؛ فتعليمات متعددة في سطر واحد تظل سطر كود واحداً.
استخدموا المجاميع وفق معيار ثابت
تتضمن الاستجابة اسم اللغة الموحد وإجمالي الأسطر والأسطر الفارغة وأسطر التعليقات وأسطر الكود. يمكنكم التحقق منها بجمع الفئات الثلاث ومقارنة الناتج بالإجمالي. استخدموا أسطر الكود مؤشراً تقريبياً للحجم، والتعليقات سياقاً توثيقياً، والأسطر الفارغة سياقاً للتنسيق، لا مقياساً مباشراً للإنتاجية أو الجودة.
قد تغير الملفات المولدة والتبعيات والاختبارات والأساليب المدمجة الأرقام كثيراً. عند إعداد تقرير لمستودع، حددوا الملفات الداخلة أولاً، وعالجوا كل ملف بلغته الصحيحة، ووثقوا سياسة الجمع. لا يبحث العداد عن ملفات ولا يستنتج الامتدادات ولا يستخدم الشبكة أو الساعة أو العشوائية.
حالات الاستخدام
إعداد جرد للمستودع
صنفوا ملفات المصدر واجمعوا أعداداً متسقة للكود والتعليقات والأسطر الفارغة في تقرير داخلي.
تقدير نطاق الترحيل
قارنوا الحجم الفعلي للمكونات المختارة قبل التخطيط لتغيير اللغة أو إطار العمل.
متابعة تغيرات الكود المولد
سجلوا تصنيفات حتمية واكتشفوا التحولات غير المتوقعة في حجم الكود أو التعليقات.
الأسئلة الشائعة
هل يحسب السطر الذي يجمع الكود وتعليقاً نهائياً مرتين؟
لا. يحسب مرة واحدة كسطر كود، وبذلك تظل جميع الفئات متنافية.
هل تعامل علامات التعليق داخل السلاسل كتعليقات؟
لا. تظل العلامات داخل السلاسل المقتبسة المعروفة جزءاً من الكود.
كيف تحسب تعليقات الكتلة الممتدة على أسطر؟
تحسب الأسطر التي تحتوي الكتلة وحدها تعليقات؛ والسطر الذي يحتوي كوداً أيضاً يحسب كوداً.
هل تتعرف الأداة على لغة البرمجة تلقائياً؟
لا. تختار اللغة من القائمة فتُطبَّق قواعد التعليق الخاصة بها. لا شيء يُخمَّن من اسم الملف أو من المحتوى، لذا يعطي النص نفسه العدد نفسه دائماً، ولا يُحكم على مقطع غامض بقواعد خاطئة.
هل يُحسب السطر الجديد في نهاية النص سطراً فارغاً؟
نعم. ينشئ السطر الجديد الأخير سطراً فارغاً بعده يُحسب ضمن الأسطر الفارغة، ولهذا تضم الدالة النموذجية سطراً فارغاً واحداً من أصل 6. لا تحذفه مسبقاً إذا أردت أن يظهر في القياس.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev2/count-lines-of-code \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"function add(a, b) {\n // Return the sum\n return a + b;\n}\n","language":"javascript"}'const res = await fetch("https://api.kit.forhosting.com/dev2/count-lines-of-code", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "function add(a, b) {\n // Return the sum\n return a + b;\n}\n",
"language": "javascript"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/count-lines-of-code",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "function add(a, b) {\n // Return the sum\n return a + b;\n}\n",
"language": "javascript"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/count-lines-of-code", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"function add(a, b) {\\n // Return the sum\\n return a + b;\\n}\\n","language":"javascript"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"function add(a, b) {\n // Return the sum\n return a + b;\n}\n","language":"javascript"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/count-lines-of-code", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "function add(a, b) {\n // Return the sum\n return a + b;\n}\n",
"language": "javascript"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.count_lines_of_code",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
استخدموا المجاميع وفق معيار ثابت
إنه يفحص النص المرسل فقط، ولذلك تنتج المدخلات المتطابقة JSON متطابقاً وتبقى قواعد الاستبعاد تحت سيطرتكم.
أسئلة تقنية
ما تكلفة عملية العد الواحدة؟
تكلف كل مطالبة API مقدار $0.002. ويمكن للمتصفح تشغيل المنطق الحتمي نفسه محلياً.
ماذا يحدث عندما تكون اللغة غير معروفة؟
تعيد القدرة خطأ invalid_input يوضح أن اللغة غير معروفة بدلاً من تخمين قواعدها.