Библиотека программиста
Летом 1998 года в нашем городе начали свою работу первые трудовые отряды старшеклассников, которые тогда носили название «Губернаторский стройотряд». Я без колебаний решил принять участие в этом мероприятии, тем более что за работу обещали денежное вознаграждение.
В 1999 году, после завершения очередных работ и получения зарплаты, я отправился в единственный книжный магазин нашего города. Там, в разделе с книгами по IT, решил потратить все свои деньги на книгу по «Turbo Pascal». Это был мой первый шаг на пути к нынешней профессии.
Интерес к программированию возник у меня ещё в школьные годы, под влиянием некоторых фильмов, в которых хакеры олицетворялись почти божествами, влияющими на реальный мир, танцуя с бубном перед монитором компьютера. Мне хотелось стать таким же профессионалом, как они, и, возможно, именно фильмы сыграли свою роль в формировании моего будущего.
Судьба сложила мой ветвистый путь к IT, таким образом, что только в 2018 году я устроился full stack-разработчиком, кем работаю по сей день. Однако у меня всегда было желание постичь что-то более сложное, писать интересные и непростые программы на языке C/C++. Без практики, теория закрепляется с трудом, и без теории не получится взяться за серьёзные проекты. Поэтому на начальном этапе, для того чтобы сформировать резюме, приходится выдумывать проекты самостоятельно (по фану). Чем они сложнее, тем больше вероятности, попасть к хорошему работодателю, на высокую ставку, или создать свой проект, который может принести не меньше прибыли.
На данный момент у меня скопилось достаточно проектов, для того чтобы заметить, что некоторые блоки кода повторяются из проекта в проект. Это натолкнуло меня на мысль о создании отдельной статической библиотеки, которая могла ускорить процесс разработки.
Я полагаю, что у каждого программиста есть свой тайный сборник библиотек, который он бережно хранит вдали от посторонних глаз. Ведь использование кода без его копирования — это хороший тон. Такой подход позволяет создать свою собственную “книгу магии”, которую можно применять повсеместно, а все изменения вносить в сборник библиотек.
Я предпочитаю разделять логику, которая может пригодиться в других проектах, на отдельные функции и создавать библиотеку — архив объектных файлов.
Например: если у нас есть необходимость проверить, есть ли в строке буквы верхнего регистра, то это можно сделать так:
bool has_upper = false;
for (auto const &var : str)
if (std::isupper(var))
has_upper = true;
if(has_upper)
// ToDo логика если есть верхний регистр
else
// ToDo верхнего регистра нет
Определение состояния переменной «has_upper», происходит всего лишь в четырёх строках. Но, на мой взгляд, гораздо компактней и более понятней, будет вынести четыре строки в нашу библиотеку.
bool hasUpperRegister(string str){
bool has_upper = false;
for (auto const &var : str)
if (std::isupper(var))
has_upper = true;
}
Теперь в файле logic.hpp можно написать короткую запись:
if(hasUpperRegister(str)){
// ToDo логика если есть верхний регистр
}else{
// ToDo верхнего регистра нет
}
В php есть удобная, на мой взгляд, функция, которой периодически приходится пользоваться. Её я решил перенести в C++. Эта функция разбивает строку разделителем, возвращая массив. Называется она explode. Эта функция выглядит следующем образом:
std::vector<std::string> exploed( const std::string &line, const std::string &delimiter ){
std::vector<std::string> ret_value;
size_t pos = 0;
std::string token;
std::string line_copy = line;
while ((pos = line_copy.find(delimiter)) != std::string::npos){
token = line_copy.substr(0, pos);
line_copy.erase(0, pos + delimiter.length());
ret_value.push_back(token);
}
ret_value.push_back(line_copy);
return ret_value;
}
В этом случае экономится больше строк, чем в предыдущем примере, а смысл всей логики укладывается в одну понятную строку..
Более объёмную логику, которая связана между собой, лучше выносить в отдельные объекты. Например: работу с файлом (открытие закрытие, чтение, запись и другую необходимую логику), более рационально выносить не в набор отдельных функций, а в объект.
Помимо прочего, создание статической библиотеки, помогает экономить не только строки в коде, но и время компиляции программы.
Удачи в ваших начинаниях.