Интересная задачка по программированию

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

Перехват вызова функции в JavaScript

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

JS для начинающих. Урок 1.18: Использование регулярных выражений

В прошлом уроке мы рассмотрели синтаксис регулярных выражений, но не обсудили, как именно их можно использовать в JavaScript. В этом уроке мы подробно рассмотрим методы объекта String для поиска и замены по регулярному выражению, а так же обратим внимание на объект RegExp и его свойства и методы. Читать далее JS для начинающих. Урок 1.18: Использование регулярных выражений

JS для начинающих. Урок 1.17: Синтаксис регулярных выражений

Регулярные выражения — это язык, который описывает шаблоны строк, основанные на метасимволах. Метасимвол – это символ в регулярном выражении, который описывает некоторый класс символов строки, указывает на положение подстроки, указывает количество повторений или группирует символы в подстроку. Например, метасимвол \d описывает цифры, а $ обозначает конец строки. В регулярном выражении могут присутствовать и обычные символы, которые описывают самих себя. Набор и значение метасимволов в регулярных выражениях описывает стандарт PCRE, большинство возможностей которого поддерживается в JS. Читать далее JS для начинающих. Урок 1.17: Синтаксис регулярных выражений

Шаблонизация на стороне клиента

Шаблонизация это привычное явление, если говорить о серверной части web-приложения. Шаблоны, обрабатывающиеся на стороне сервера, преобразуются в html-код, которой отдаётся клиенту, в качестве которого чаще всего выступает браузер. В таком подходе есть свои недостатки. Читать далее Шаблонизация на стороне клиента

JS для начинающих. Урок 1.16: Приведение типов

JavaScript — язык с динамической типизацией данных. Это значит, что в одну и ту же переменную можно записывать значения различных типов, при этом тип самой переменной будет меняться. Подобное поведение часто позволяет забыть о различном поведении переменных с разным типом, но помнить об этой особенности всё же необходимо. Читать далее JS для начинающих. Урок 1.16: Приведение типов

Итерирование объектов в php. Встроенные классы-итераторы. Объект как массив

Класс часто представляет собой контейнер для хранения целого набора каких-то однотипных данных, в том числе и экземпляров других классов. В этом случае неплохо было бы, чтобы такой класс-контейнер предоставлял удобный интерфейс для доступа к этому набору данных. Это чем-то похоже на обычный массив, только в нашем случае механизм доступа к объектам, хранящемся в нашем контейнере, мы реализуем сами. Так же желательно, чтобы методы для доступа к содержимому классов-контейнеров были стандартизированы, то есть имели одинаковое имя для многих классов-контейнеров. Такого можно добиться при помощи интерфейсов, которые обязывают реализовывать описываемые ими методы в классах, которые имплементируют эти интерфейсы. Так же прекрасно было бы, если механизм доступа к содержимому был интегрирован в язык, то есть доступ к элементам внутреннего набора, их перебор и прочие действия осуществлялись бы так же, как в случае с массивом. Читать далее Итерирование объектов в php. Встроенные классы-итераторы. Объект как массив

ООП в PHP: Абстрактные классы и интерфейсы

Одной из вещей, которая делает код более расширяемым, является полиморфизм. Я уже упоминал про него в нескольких предыдущих статьях. Напомню, что полиморфизм проявляется, когда версия переопределённого метода в цепочке наследования определяется прямо при его вызове исходя из типа объекта, от которого этот метод вызывается. Для того чтобы убедиться в наличии нужного нам метода у объекта можно проверять его тип при помощи оператора instanceof или уточнить тип аргумента метода. В этом случае, конечно, метод должен быть реализован хотя бы в том классе, имя которого мы указываем при использовании оператора instanceof или задаём в качестве типа аргумента. Теперь представьте, что нам нужно задать, что нужно уметь делать экземплярам заданного типа, но мы пока не знаем как они это будут делать. То есть нам необходимо обязать иметь реализацию некоторого метода в ветке наследования. Читать далее ООП в PHP: Абстрактные классы и интерфейсы

JS для начинающих. Урок 1.15: Методы для работы с массивами

В одном из предыдущих уроков я уже знакомил вас с массивами. Тогда был рассмотрен синтаксис объявления массивов и обращения к их элементам. В этом уроке мы сосредоточимся на описании встроенных методов для работы с массивами. Читать далее JS для начинающих. Урок 1.15: Методы для работы с массивами

Каррирование (карринг) в JavaScript

Нет, термин «каррирование» никак не связан со знаменитой приправой и вообще не имеет никакого отношения к восточной кухне. Это приём в функциональном программировании, позволяющий преобразовать функцию, заменив её несколько первых аргументов константными значениями, тем самым создав новую функцию с меньшим количеством аргументов на основе старой. Этот будет удобно применять в случае, когда первые несколько аргументов функции заранее известны, и указывать их при каждом вызове нет необходимости. Для краткости будем называть преобразовываемую функцию каррируемой, а функцию, которая её преобразовывает, каррирующей. Читать далее Каррирование (карринг) в JavaScript