Язык C++ имеет репутацию довольно многословного. В общем-то, это так. Но уж очень сильно зависит от слишком уж многих факторов. Ниже пример трансформации кода, который был многословным. Но это определялось вовсе не свойствами языка.
Итак, было:
so_5::ret_code_t so_sysconf_layer_t::run_script( const std::string & file_name, so_5::throwing_strategy_t throwing_strategy ) { return m_so_sysconf_layer_impl->run_script( file_name, throwing_strategy ); } so_5::ret_code_t so_sysconf_layer_impl_t::run_script( const std::string & file_name, so_5::throwing_strategy_t throwing_strategy ) { bool result = false; // Последовательность задач. task_vector_t task_sequence; result = script::parse_file( file_name, task_sequence ); // Если файл разобран нормально, то // вставляем всю последовательность. if( result ) { m_tasks_handler.m_task_queue->push( task_sequence ); return 0; } else { return so_5::util::apply_throwing_strategy( so_5::rc_unexpected_error, throwing_strategy, "unable to start so_sysconf by script '" + file_name + "'"); } } |
После переосмысления, устранения некоторых ошибок, перехода на информирование об ошибках только через исключения, задействования механизма rvalue references он стал выглядеть вот так:
void so_sysconf_layer_t::run_script( const std::string & file_name ) { LOCK_AND_CHECK_WORKING_STATE( so_sysconf_layer_t::run_script ); m_data->m_tasks_handler.queue().push( script::parse_file( file_name ) ); } |
Еще раз уточню: новый вариант делает все то же самое, что и старый. И даже больше, т.к. устраняет несколько ошибок с синхронизацией, которые были в старой версии.
Комментариев нет:
Отправить комментарий