Что значит название функции

Практическое руководство по именованию классов, функций и переменных

В компьютерном программировании соглашение об именах — набор правил для выбора последовательности символов, которая будет использоваться для идентификаторов, которые обозначают переменные, типы, функции и другие объекты в исходном коде и документации, — «Википедия»

Придумывать названия сложно!

В этой статье мы сосредоточимся на методе именования (P)A/HC/LC для того, чтобы улучшить читаемость кода. Эти рекомендации можно применить к любому языку программирования, в статье для примеров кода используется JavaScript.

Что значит (P)A/HC/LC?

В этой практике используется следующий шаблон для именования функции:

Что обозначает префикс (P)?

Префикс расширяет смысл функции.

Описывает свойство или состояние текущего контекста (обычно — логическое значение).

Указывает, имеет ли текущий контекст определенное значение или состояние (обычно — логическое значение).

Отражает положительный условный оператор (обычно — логическое значение), связанный с определенным действием.

Действие — это сердце функции

Действие — это глагольная часть имени функции. Это самая важная часть в описании того, что делает функция.

Получает доступ к данным немедленно (сокращение от getter для внутренних данных).

Безусловно присваивает переменной со значением A значение B.

Возвращает переменную к её начальному значению или состоянию.

Выполняет запрос данных, для которого требуется время (например, асинхронный запрос).

Удаляет что-то откуда-то.

Например, если у вас есть коллекция выбранных фильтров на странице поиска, удаление одного из них из коллекции — это removeFilter , а не deleteFilter (именно так вы и скажете на английском языке):

Полностью стирает что-то. После операции сущность перестаёт существовать.

Представьте, что вы редактор контента, и есть пост, от которого вы хотите избавиться. Как только вы нажали на кнопку delete-post, CMS выполнила действие deletePost , а не removePost .

Создает новые данные из существующих. Обычно это применимо к строкам, объектам или функциям.

Обработка действия. Часто используется при именовании обратного вызова.

Контекст

Контекст — это область, с которой работает функция.

Функция — это часто действие с чем-то. Важно указать, какова её рабочая область или, по крайней мере, ожидаемый тип данных.

В итоге

Пять принципов именования переменных

В этом разделе мы предложим некоторые правила именования переменных, которые улучшат читаемость кода.

1. Следуйте S-I-D

Имя должно быть коротким (Short), интуитивно понятным (Intuitive) и описательным (Descriptive).

2. Избегайте сокращений

Не используйте сокращения. Обычно они только ухудшают читаемость кода. Найти короткое, описательное имя может быть сложно, но сокращения не могут быть оправданием для того, чтобы этого не делать. Например:

3. Избегайте дублирования контекста

Всегда удаляйте контекст из имени, если это не снижает его читабельность.

4. Отражайте в имени ожидаемый результат

5. Учитывайте единственное/множественное число

Как и префикс, имена переменных могут быть единственного или множественного числа в зависимости от того, имеют ли они одно значение или несколько.

6. Используйте осмысленные и произносимые имена

Источник

Имена методов и функций

Изучая всякого рода системы, я обнаружил, что у многих наблюдаются проблемы с именованием методов. Это побудило меня написать статью.

Что побудило меня написать статью?

После того, как я в тысячный раз полез в мануал, чтобы узнать порядок аргументов в PHP-функции str_replace, стало ясно, что проблема весьма актуальна. Ведь имя функции «str_replace» говорит нам только о том, что она делает, но ничего не говорит об аргументах. Чем это чревато? Ладно, можно запомнить число и порядок аргументов во встроенной библиотеке, но в собственной разработке запоминать аргументы не так-то и просто. Да, есть среды разработки, которые нам подсказывают, но они не срабатывают при наведении глаза на функцию, поэтому читать такой код сложно. А ведь важно, чтобы код легко читался и понимался без комментариев. Это признак качественного кода.

В качестве примера многочисленных ошибок, приведу PHP. Сразу могу назвать несколько ошибок:

1. Имена некоторых функций неочевидно передают назначение. Например, basename.

2. Имена функций составлены не по одному принципу. Например, строковые функции начинаются с str_, но не все (например, strstr, strpos). С файлами та же проблема: filesize vs file_exists.

3. Неочевидность аргументов и их порядка в функциях. Например, искомая строка в функции str_replace идет на последнем месте, а в функции strpos — на первом (str_replace($search, $replace, $subject[, $&count]) vs strpos($haystack, $needle[, $offset])). Если бы искомая строка, например, всегда занимала первую позицию — было бы более удобно.
Да, таково наследство Си (и не только), но неважно: проблема есть проблема.

Значит, надо придумывать имена методов/функций так, чтобы:

1. Имя функции/метода четко передавало его назначение.

2. Имена функций/методов составлены по одному принципу/стандарту.

3. Порядок и список аргументов в функциях/методах были составлены по одному принципу и сочетались с именем.

4. Методы оставались методами.

Поясню 4ый пункт. Нередко я встречаю строки вида object.Pi(): такой метод не имеет отношения к объекту. Это скорее функция (или константа).

Примеры и не только

1. Нам нужна замена подстроки в строке. Самым очевидным вариантом будет такой: string.replace(from, to). Жаль, что в PHP он не осуществим.

2. Намекаем на аргументы и смысл: groups.getByName(name). Ничего лишнего. Не надо писать getGroupByName, ведь контекст ясен благодаря groups. Точно так же и другие методы: groups.remove(group) либо group.delete(). Ага! И тут интересный момент 🙂 Если мы удаляем из коллекции, то коллекция.remove(элемент). А если элемент сам удаляет себя, то элемент.delete(). И это важно: наш код должен быть валидным в плане английского языка.

3. Антонимы в именах функций/методов. Да, всегда надо использовать верные антонимы при именовании. Добавляем и удаляем элементы в коллекции: add/remove. Создаем и удаляем объекты: create/delete. Начинаем и завершаем процесс: begin/end, start/finish (но никак не begin/finish и start/end).

Источник

Умеете ли вы правильно называть функции?

Авторизуйтесь

Умеете ли вы правильно называть функции?

Автор перевода — Мария Багулина

Названия функций крайне важны, особенно если вы занимаетесь разработкой пользовательского API. Иногда имя может прекрасно описывать то, что делает функция, но на практике оказывается абсолютно бесполезным. И с этим можно столкнуться даже в стандартных библиотеках. В качестве примеров рассмотрим несколько функций C++20.

Пример 1: std::log2p1()

Начнём с функции std::log2p1(). Её код выглядит так:

Функция просто возвращает двоичный логарифм числа плюс один, о чём и говорит её название.

Но какая от этого польза?

На самом деле std::log2p1(x) возвращает количество битов, необходимых для хранения x. Это действительно нужная функция, но её название совсем не отражает суть выполняемой операции.

Пример 2: std::bless()

Если вы плохо знакомы с языком C++, то вот быстрое введение в его объектную модель.

ABBYY , Москва, можно удалённо , От 250 000 ₽

В С++ существует такая штука, как указатель — переменная, в которую записывается адрес другого объекта в памяти. Над указателем можно выполнять арифметические действия, но только если он является элементом массива. Почему так? Потому что нельзя вычитать или прибавлять что-то к произвольному указателю — это не имеет смысла, так как расположение объектов в памяти неизвестно.

Однако такое действие не является явной ошибкой, а порождает неопределённое поведение (то есть результат, зависящий от состояния памяти, компилятора, фазы луны или каких-либо других случайных факторов).

Проблема сводится не к глупым программистам, которые зачем-то складывают указатели (ведь это не запрещено), а к самому языку С++. Поэтому Ричард Смит, исследователь из Google, предложил добавить в стандарт функцию std::bless(void* ptr, std::size_t n), чтобы при необходимости автоматически выделять массив памяти и тем самым разрешить вопрос с арифметикой для указателей.

Имя bless, разумеется, никак не сообщает обо всех этих нововведениях, поэтому было решено придумать другое название для функции. За дело взялся комитет по развитию языка C++: в качестве кандидатов они выдвинули верси и implicitly_create_objects() и implicitly_create_objects_as_needed() («неявно создать объекты» и «неявно создать объекты при необходимости»). Имена вполне логичны, ведь функция делает именно то, что в них сказано. Но, согласитесь, если бы вы не знали предысторию, то совершенно не поняли, зачем нужно создавать какие-то объекты.

Пример 3: std::popcount()

Напоследок ещё одна стандартная функция C++ 20. Просто посмотрите на её имя и попробуйте угадать, что она делает. Кажется, что-то считает? Может быть, это связано со стековыми операциями pop и push?

Скорее всего, вы не догадаетесь, если только уже не знаете о низкоуровневой инструкции с таким же названием. Функция popcount (сокращённо от «population count») подсчитывает количество установленных битов в машинном слове.

С одной стороны, это было бы отличное имя, если бы все разработчики знали названия ассемблерных битовых операций. Но будет ли оно очевидно новичку, который не в курсе таких тонкостей?

Как же следует называть функции?

Ни одно из имён, представленных выше, нельзя назвать плохим: они действительно описывают то, что делают функции. Но для вас, как пользователя, эти имена бесполезны — они содержат не ту информацию, которая вам нужна.

Вряд ли вы подумаете: «Так, мне нужно вычислить двоичный логарифм плюс один, нет ли случайно стандартной функции для этого?». Скорее в вашей голове будет мысль: «Теперь мне нужно знать, сколько битов требуется для хранения этого значения». И ваш запрос в Google будет выглядеть примерно как: «bit width function C++» — почему бы тогда вместо log2p1() не использовать имя bit_width() ?

Имена, которые описывают реализацию функции, будут понятны для разработчиков, но могут оказаться совершенно бессмысленными для пользователей. Причём этими пользователями являются другие разработчики, которые хотят подключить к своему проекту кем-то созданную библиотеку. Согласитесь, в этом случае важно то, что делают функции, а не как они реализованы.

Happy end

Раз уж мы затронули тему C++20, спешим сообщить хорошие новости: кажется, комитет по развитию языка всё-таки переименует std::log2p1() в std::bit_width() . Но проблема именования затрагивает не только стандартные библиотеки. Поэтому если ваш проект предполагает, что его кодом кто-то будет пользоваться в дальнейшем, выбирайте говорящие имена и смотрите на функции с точки зрения пользователей.

Источник

Значение слова «функция»

1. Явление, зависящее от другого и изменяющееся по мере изменения другого явления. Литература в целом мире признается как одна из функций общественного бытия. Салтыков-Щедрин, Признаки времени.

2. Мат. Переменная величина, меняющаяся в зависимости от изменения другой величины (аргумента). Тригонометрические функции.[Володя], бойко постукивая мелом о черную доску, толкует о функциях, синусах, координатах и т. п. Л. Толстой, Отрочество.

3. Биол. Работа, производимая органом, организмом, как проявление его жизнедеятельности. Вот вам азбука биологии: если какой-нибудь орган продолжительное время не упражнять, то он утрачивает способность отправлять свои функции. Федин, Города и годы. [Котельников:] Проблема сводится к восстановлению жизненных функций организма, пораженного тем или иным ядом. Лавренев, Мы будем жить!

4. перен. Обязанность, круг деятельности. — [Развалихин] утром сказал, что пойдет в школу проводить обществоведение вместо тебя. «Это, говорит, моя прямая функция, а не Корчагина». Н. Островский, Как закалялась сталь.

5. Значение, назначение, роль. Функция творительного падежа. Функции денег.

[От лат. functio — исполнение]

Источник (печатная версия): Словарь русского языка: В 4-х т. / РАН, Ин-т лингвистич. исследований; Под ред. А. П. Евгеньевой. — 4-е изд., стер. — М.: Рус. яз.; Полиграфресурсы, 1999; (электронная версия): Фундаментальная электронная библиотека

  • Фу́нкция (лат. functio — «исполнение, совершение; служебная обязанность») — отношение между элементами, в котором изменение в одном влечёт изменение в другом:

Функция (философия) — обязанность, круг деятельности.

Функция (работа) — работа, производимая органом, организмом, прибором; роль, значение чего-либо; назначение чего-либо.

Функция (литературоведение) — назначение персонажа в литературном произведении.

Социальная функция — использование того или иного механизма социальных взаимодействий для достижения определённой цели или реализации определённых ценностей.

Функция (математика) — закон зависимости одной величины от другой.

Функция (программирование) — вид подпрограммы в информатике.

Функциональная зависимость (программирование) — в теории реляционных баз данных.

ФУ’НКЦИЯ, и, ж. [латин. functio — выполнение работы]. 1. Явление, зависящее от другого и изменяющееся по мере изменения этого другого явления (книжн.). 2. Переменная величина, меняющаяся в зависимости от изменения другой величины (мат.). Величина давления газа есть функция величины его объема. 3. Работа, производимая органом, организмом (биол., физиол.). Отделение слюны является основной функцией слюнной железы. 4. перен. Обязанность, круг деятельности чего-н., подлежащая исполнению работа (книжн.). Служебные функции. Исполнять свою функцию в обществе. Функции государственного управления. 5. Значение, назначение, роль (книжн.). Ф. математического знака. Ф. родительного падежа.

Источник: «Толковый словарь русского языка» под редакцией Д. Н. Ушакова (1935-1940); (электронная версия): Фундаментальная электронная библиотека

фу́нкция

1. перен. книжн. обязанность, круг деятельности чего-либо, подлежащая исполнению работа ◆ Служебные функции. ◆ Исполнять свою функцию в обществе. ◆ Функции государственного управления.

2. книжн. значение, назначение, роль ◆ Функция математического знака. ◆ Функция родительного падежа.

3. матем. переменная величина, меняющаяся в зависимости от изменения другой величины, а также закон, определяющий свойства такого изменения ◆ Величина давления газа есть функция величины его объёма.

4. книжн. явление, зависящее от другого и изменяющееся по мере изменения этого другого явления

5. биол. физиол. работа, производимая органом, организмом. ◆ Выделение слюны является основной функцией слюнной железы.

7. комп. в программировании — фрагмент программного кода (подпрограмма), к которому можно обратиться из другого места программы.

Источник

Читайте также:  Что значит инд тотал ком
Оцените статью