مسیرها
/
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 سیستم شروع می‌کند. اگر می‌خواهید فایل‌های محلی را اضافه کنید، از گیومه‌های دوتایی استفاده می‌کنید: #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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.