Рубрика «функции» - 3

Доброго времени суток!

Понадобилось сделать небольшой проект. В проекте разбор и вычисление математических формул.
Требования: вложенные функции, неограниченная глубина вложения и внешние переменные.

В интернете много решений, но все не то, или не так. Или без формул, или без переменных или простейшие возможности типа «1+(2-3)/4». Зато большинство ответов были в сторону лексического анализа и обратной польской нотации. Вот их я и применил, взяв примеры с разных источников.

Сначала разберем лексический анализ. Потому что простой анализ формулы по символам с поиском в ней функций, операторов, переменных и прочего получился бы крайне нечитабельный.

Реализацию алгоритмов можно взять в интернете и подредактировать под свои нужды.

Для лексического анализа внес небольшие изменения:

  • загрузка списка переменных. В конструкторе происходит замена переменных их значениями;
  • замена разделителей целой-дробной части числа на тот что используется в системе;
  • добавил унарный минус;
  • удалил лишние для меня лексемы.

Вот что получилось. Ниже будет ссылка на исходники.
Читать полностью »

Русский перевод очень полезной статьи Natasha Murashev The Many Faces of Swift Functions.

Хотя у Objective-C синтаксис выглядит несколько странно, по сравнению с другими языками программирования, синтаксис метода — прост и понятен. Вот небольшой экскурс в прошлое:

+ (void)mySimpleMethod
{
    // метод "класса"
    // нет параметров
    // нет возвращаемых значений
}

- (NSString *)myMethodNameWithParameter1:(NSString *)param1 parameter2:(NSNumber *)param2
{
    // метод "экземпляра"
    // первый параметр - типа NSString указатель, 
    // второй параметр  - типа NSNumber указатель
    // должен вернуть значение типа NSString указатель
    return @"hello, world!";
}

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

Прежде чем я продолжу, я хочу прояснить разницу между «методами» и «функциями» в Swift, так как я повсеместно буду использовать оба этих термина в этой статье. Вот определение «методов», данное в книге Apple «Swift Programming Language»:

Читать полностью »

Содержание

Цу-ли и Цу-су похвалялись размерами своих новых программ. «Двести тысяч строк»,- сказал Цу-ли,- «не считая комментариев!» Цу-су ответил: «Пф-ф, моя – почти миллион строк». Мастер Юнь-Ма сказал: «Моя лучшая программа занимает пятьсот строк». Услышав это, Цу-ли и Цу-су испытали просветление.

Мастер Юнь-Ма, Книга программирования

Есть два способа построения программ: сделать их настолько простыми, что там очевидно не будет ошибок, или же настолько сложными, что там не будет очевидных ошибок.

Энтони Хоар, 1980 лекция на вручении премии Тьюринга

Большая программа – затратная программа, и не только из-за времени её написания. Большой размер обычно означает сложность, а сложность сбивает с толку программистов. Сбитые с толку программисты делают ошибки в программах. Большая программа означает, что багам есть где спрятаться и их получается труднее отыскать.
Читать полностью »

Недавно я обратил внимание на одну вещь, которая стала меня беспокоить: PHP-программисты не используют функции.

Пожалуй, слишком сильное обобщение, поэтому уточню: PHP-разработчики, достичшие определенного уровня мастерства, практически перестают писать обычные функции, вместо них сплошные классы и методы. Во всяком случае, такое впечатление складывается, когда смотришь код библиотек и фреймворков с открытым кодом. Все “крутые” библиотеки используют разве что анонимные функции, и только.
Читать полностью »

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

bool foo(int important, int& pOut, int sometimes = 1, int occasionally = 2, int rarely = 3)
{
//...
}

Проблемы здесь могут быть следующие

  1. Пользователи постоянно путают порядок параметров, тип их практически полностью совпадает, поэтому компилятор ничем помочь не может (разве что иногда со вторым параметром).
  2. Из необязательных параметров чаще всего нужен один, причем если это не sometimes, пользователи вынуждены вспоминать значения по умолчанию, чтобы задать их в вызове явно. Значения по умолчанию разные, так что ошибок снова много
  3. Нет никакой возможности выразить зависимость значений по умолчанию одних параметров от других.

Проблемы эти можно решить по-разному: передавать в качестве параметра структуру, использовать перегрузку функций или даже функции с разными именами… Boost предлагает еще один вариант решения.
Читать полностью »

imageДоброго ночи! Мы продолжаем изучение Erlang для самых маленьких.

В прошлой главе мы рассмотрели как объявлять функции и как объединять их в модули. В этой главе мы рассмотрим синтаксис функций более подробно.

Читать полностью »

Речь пойдет о написании на JavaScript функций с переменным количеством аргументов, возникающих в процессе проблемах и способах решения этих проблем.
Читать полностью »

imageДоброго вечера, дорогие Хабровчане. Мы продолжаем изучение Erlang для самых маленьких.

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

В этой главе мы поднимемся на следующую ступень и рассмотрим модули и функции.

Читать полностью »

1. Особенности работы с переменными и литералами в Perl6
2. Perl6 — Операции над переменными, анонимные блоки
3. Perl6 — Условные операторы, циклы
4. Perl6 — Работа с функциями
5. Perl6 — Классы
6. Perl6 — Ввод-вывод, модули
7. Perl6 — Комментарии, пробельные символы, скобки
Однажды я уже писал статью о функциях и об особенностях их использования (№4). Сейчас я хочу рассмотреть одну из их разновидностей — операторов.
Читать полностью »

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

Хочу поделиться своей гипотезой на этот счет, близкой к ИТ тематике.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js