المسارات
/
C++
C++
/
التمارين
/
مستويات السجل
مستويات السجل

مستويات السجل

تمرين تعلّمي

مقدمة

التضمينات

في العموم، لا تريد أن تعيد اختراع العجلة عندما يتعلق الأمر بالبرمجة. فبالنسبة لكثير من الخوارزميات القياسية، سيوجد من أنجز عملك عنك مسبقًا.

توجيه include

لتضمين محتوى ملفات أخرى، تستخدم C++ التوجيه include. ويجب أن تُكتب هذه التضمينات في أعلى الملف. أثناء التصريف، يُستبدل السطر الذي يحوي التوجيه بمحتوى الملف المعني. وتُحفظ فضاءات الأسماء كما هي في الملف الأصلي بعد التضمينات.

المكتبة القياسية

تقدّم المكتبة القياسية العديد من الدوال والخوارزميات وبنى البيانات الشائعة. وتستخدم المكتبة القياسية فضاء الأسماء std.

أحد الأمثلة هي مكتبة الأعداد في C، وهي cmath. فهي تقدّم العديد من العمليات الرياضية الشائعة.

#include <cmath>

int cube_me(int a) {
    // raise `a` to the third power
    return std::pow(a, 3);
}
Note

تُضمَّن المكتبات القياسية بأقواس زاوية <> بدلًا من علامات الاقتباس المزدوجة ". والفرق هو في الموقع الذي يبحث فيه المُصرِّف عن الملفات المعنية. فيُتخطّى البحث في المشروع الحالي عند استخدام صيغة الأقواس الزاوية، ويبدأ المُصرِّف مباشرة في مجلدات تضمين النظام. وإذا أردت تضمين ملفات محلية فستستخدم علامات الاقتباس المزدوجة: #include "myfile"

السلاسل النصية

السلسلة النصية string في C++ كائن قابل للتغيير يمثّل نصًا على هيئة تسلسل من المحارف (حروف وأرقام وعلامات ترقيم وغير ذلك). وتُعالَج السلاسل النصية باستدعاء طُرق السلسلة النصية.

مكتبة السلاسل النصية

في C++ يجب تضمين نوع السلسلة النصية والدوال المرتبطة به من مكتبة السلاسل النصية قبل استخدامه. ويمكنك فعل ذلك بإضافة #include <string> إلى أعلى ملفك. وعندئذٍ ستملأ هذه الدوال فضاء الأسماء std. والاسم المؤهَّل بالكامل لنوع السلسلة النصية هو std::string. ويستخدم النص الحرفي للسلسلة النصية محرف علامة الاقتباس المزدوجة: ".

#include <string>
std::string w_berry_quote{"A well-made sentence, I think, is a thing of beauty."};

عمليات السلاسل النصية الشائعة

يمكنك استخدام العامل + لربط السلاسل النصية معًا:

std::string original_title{"The School of Rock"};
std::string sequel_indicator{"Electric Boogaloo"};
std::string next_movie_title = original_title + " 2: " + sequel_indicator;

لاستخدام مكتبة السلاسل النصية، عليك أن تعرف أنه يمكن استدعاء دالة تنتمي إلى كائن. وتُسمّى هذه الدوال الأعضاء. لاحقًا في المنهج، ستتعلم المزيد عن الدوال الأعضاء وعن مفهوم الصنف المرتبط بها.

std::string qualification{"awesome"};
// 1st argument: from the index to the end of the string:
std::string who_is_awesome = qualification.substr(5);
// => "me"

// 2nd optional argument for the length:
std::string material{"haunted books"};
std::string ghost = material.substr(8, 3);
// => "boo"

ودالة find مفيدة جدًا أيضًا. فهي تُستدعى كدالة عضو على السلسلة النصية وتأخذ سلسلة نصية كوسيط. وتُرجع find الموضع ذا الترقيم الذي يبدأ من الصفر لأول ظهور في السلسلة النصية.

std::string new_release{"apple released a new app!"};
new_release.find("app");
// => 0
new_release.find("e");
// => 4

التعليمات

في هذا التمرين، ستتعامل مع أسطر من تقرير مسجل. كل سطر سجل هو سلسلة نصية منسقة كما يلي: "[<LEVEL>]: <MESSAGE>".

هناك ثلاثة مستويات مختلفة للسجل:

  • INFO
  • WARNING
  • ERROR

لديك ثلاث مهام، كل مهمة ستأخذ سطر سجل وتطلب منك فعل شيء به.

1. استخرج الرسالة من سطر سجل

طبّق طريقة log_line::message لتُرجع رسالة سطر السجل:

log_line::message("[ERROR]: Invalid operation")
// => "Invalid operation"

2. استخرج مستوى السجل من سطر سجل

طبّق طريقة log_line::log_level لتُرجع مستوى السجل لسطر السجل، والذي يجب أن يُرجع بأحرف كبيرة:

log_line::log_level("[ERROR]: Invalid operation")
// => "ERROR"

3. أعد تنسيق سطر سجل

طبّق طريقة log_line::reformat التي تعيد تنسيق سطر السجل، مع وضع الرسالة أولًا ومستوى السجل بعدها بين الأقواس الهلالية:

log_line::reformat("[INFO]: Operation completed")
// => "Operation completed (INFO)"
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
C++ Exercism

مستعد لبدء مستويات السجل؟

سجّل في Exercism لتتعلّم وتتقن C++ عبر 19 مفهومًا100 تمرين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.