Академия Кода – Telegram
Академия Кода
2K subscribers
673 photos
2 videos
2 files
50 links
Академия кода. Полезный контент по программированию. По всем вопросам @evgenycarter
Download Telegram
Неиспользуемые переменные

Подобный макрос есть, например, в cocos2d-x, там он называется CC_UNUSED_PARAM. Из недостатков: теоретически, он может работать не на всех компиляторах. Тем не менее, в cocos2d-x он для всех платформ определен абсолютно одинаково.

Для чего? Этот макрос позволяет избежать предупреждения о неиспользуемой переменной, а читающему код он как бы говорит: «тот кто писал это — знал, что переменная не используется, все в порядке».

#cpp

Подписывайтесь на канал 👉@cod_academy
1👍1
Может ли объект получить доступ к члену класса, объявленному как private? Если да, то каким образом?

• Внутри класса доступ к приватной переменной открыт без ограничений;
• Вложенный класс имеет полный доступ ко всем (в том числе и приватным) членам содержащего его класса;
• Доступ к приватным переменным извне может быть организован через отличные от приватных методов, которые предоставлены разработчиком класса. Например: getX() и setX().
• Через механизм рефлексии (Reflection API).

#java

Подписывайтесь на канал 👉@cod_academy
👍2
Библиотека FuzzyWuzzy

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

Разумеется, это один из инструментов, всегда можно использовать другой, но я лично пользуюсь этим.

Библиотеку следует установить:

install fuzzywuzzy

#python

Подписывайтесь на канал 👉@cod_academy
👍4
set::erase()

Функция erase() используется для удаления элементов из контейнера по указанной позиции или диапазону.
#cpp

Подписывайтесь на канал 👉@cod_academy
👍2
Способы чтения ввода с консоли в Java

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

Рассмотрим один из них - использование класса Buffered Reader. Это классический метод ввода данных в Java, представленный в JDK 1.0. Этот метод используется путем обертывания System .in (стандартный поток ввода) в InputStreamReader, который обернут в BufferedReader.

#java

Подписывайтесь на канал 👉@cod_academy
👍5
Избегайте неоправданных циклов с коллекциями

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

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

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

#python

Подписывайтесь на канал 👉@cod_academy
👍2
В чем отличие malloc от new?

Ответ: malloc — выделение блока памяти в стиле Си, опасное с точки зрения приведения типов (non-typesafe), т.к. возвращает void * и требует обязательного приведения. new — выделение блока памяти и последующий вызов конструктора, безопасное с точки зрения приведения типов (typesafe), т.к. тип возвращаемого значения определен заранее.

#cpp

Подписывайтесь на канал 👉@cod_academy
👍2
Меняем местами две переменные в одной строке

Многие знают, что в Python можно красиво поменять значения переменных в одну строку: a, b = b, a

Можно ли что-то похожее сделать в Java? Да. На картинке показан пример, но в реальных проектах так делать не стоит.

#java

Подписывайтесь на канал 👉@cod_academy
👍1
"Быстрый" контейнер deque

Встроенных списков в Python иногда может не хватать, поэтому покажем одну хорошую альтернативу. Deque может быть реализован c помощью модуля collections.

Deque предпочтительнее, чем обычный список, в тех случаях, когда нам нужны более быстрые операции добавления и вытягивания элементо из обоих концов контейнера, поскольку deque обеспечивает линейную сложность O(1) для операций добавления и выталкивания по сравнению со списком, у которого сложность по времени для тех операций составляет O(n).

Также для deque есть возможность использовать стандартные функции по типу sum, min, max и тому подобные.

#python

Подписывайтесь на канал 👉@cod_academy
👍1
Бесконечный цикл

Для чего? Когда while(true), while(1), for(;;) и прочие стандартные пути создания цикла кажутся не слишком информативными, можно использовать подобный макрос. Единственный плюс который он дает — чуть лучшую читаемость кода.

#cpp

Подписывайтесь на канал 👉@cod_academy
👍1
Класс Java.io.OutputStream в Java

Этот абстрактный класс является суперклассом всех классов, представляющих выходной поток байтов. Output-поток принимает байты и отправляет их в какой-то приемник. Приложения, которым необходимо определить подкласс OutputStream, всегда должны предоставлять по крайней мере метод, который записывает один байт вывода.

#java

Подписывайтесь на канал 👉@cod_academy
👍1
Как проверить существование переменной в Python?

Вы можете использовать in locals() или in globals(), чтобы проверить переменная существует в Python, разница только:

in locals() проверяет если переменная объявлена в локальной зоне видимости
in globals() проверяет если переменная объявлена в глобальной зоне видимости

#python

Подписывайтесь на канал 👉@cod_academy
👍2
Какие классы и интерфейсы доступны в Collection фреймворке?

Интерфейсы:
• Collection;
• List;
• Set;
• Map;
• Sorted Set;
• Sorted Map;
• Queue.
Классы:
• Lists(ArrayList, LinkedList, Vector(deprecated))
• Sets(HashSet, LinkedHashSet, TreeSet)
• Maps(HashMap, TreeMap, HashTable (deprecated), LinkedHashMap)
• Queue(Priority Queue)

#java

Подписывайтесь на канал 👉@cod_academy
👍1
Switch

Switch позволяет проверять различные условия выражения. Если же есть совпадение, будет выполняться определенная команда.
Break используется для выхода из case. Если же не использовать break, будут выполняться все условия подряд. Код в default выполняется при условии, если ни один case не был выполнен.

#cpp

Подписывайтесь на канал 👉@cod_academy
👍1
Метод endsWith()

Проверяет заканчивается ли эта строка указанным окончанием.

Метод возвращает значение true, если последовательность символов, представленного аргумента является окончанием последовательности символов, представленного этим объектом; в противном случаи значение false. Обратите внимание, что результатом будет значение true, если аргумент является пустой строкой или равным строковому объекту, определено как методом equals(Object).
#java

Подписывайтесь на канал 👉@cod_academy
👍1
Официальное упорядочивание словарей

Кстати, Python 3.7 на официальном уровне зафиксировал соответствие порядка перебора элементов словарей порядку их добавления.

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

Однако это был просто побочный результат реализации, не зафиксированный в стандарте. Новый Python оформил его официально. Теперь можно быть уверенным в сохранении порядка вставки.
#python

Подписывайтесь на канал 👉@cod_academy
👍1
Представления (Views)

Представления — это просто-напросто диапазоны, которые дешево копировать и перемещать (за константное время). Из-за этого представление не может владеть элементами, которые просматривает. Одно исключение — std::views::single, которому принадлежит единственный просматриваемый элемент.

Представления компонуются во время компиляции с прицелом на то, что компилятор заинлайнит код.

Например, следующий код последние последние три элемента диапазона. Сначала мы reverse’им диапазон, затем берем первые три элемента и, наконец, снова reverse’им диапазон (обратите внимание, что существует std::views::drop, который делает это напрямую).

#cpp

Подписывайтесь на канал 👉@cod_academy
Оператор присваивания ( = ), строго говоря, является бинарным оператором. Его объявление идентично объявлению любого другого бинарного оператора со следующими исключениями:

☑️ Он должен быть нестатической функцией-членом.

☑️ Он не наследуется производными классами.

☑️ Компилятор может создать функцию operator = по умолчанию для типов классов, если она не существует.

В примере показано, как объявить оператор присваивания.


#cpp

Подписывайтесь на канал 👉@cod_academy
👍2
Бинарный поиск

Чаще всего бинарный поиск (бинпоиск) используют, чтобы найти элемент в отсортированном массиве. Мы начинаем искать с середины массива. Если находим то, что нужно, или если больше нечего рассматривать, мы останавливаемся. В противном случае мы решаем, в каком направлении — вправо или влево от середины — мы должны продолжить поиск. Так как пространство поиска после каждой проверки делится на два, то время выполнения алгоритма — O(log n).

#cpp

Подписывайтесь на канал 👉@cod_academy
👍2
Контекстные менеджеры

Контекстные менеджеры позволяют задать поведение при работе с конструкцией with: при входе и выходе из блока. Это упрощает работу с ресурсами в части их захвата и освобождения; транзакциями, когда нужно либо полностью закончить транзакцию, либо откатить ее целиком.

Простейшей функцией, использующей данный принцип является функция open. Каждый раз, когда мы открываем файл, нам необходимо его закрыть, чтобы вытолкнуть выходные данные на диск (на самом деле Python вызывает метод close автоматически, но явное его использование является хорошим тоном).

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

#python

Подписывайтесь на канал 👉@cod_academy
👍1
forward_list::unique() в C++ STL

forward_list::unique() — это встроенная функция в C++ STL, которая удаляет все последовательные повторяющиеся элементы из forward_list. Для сравнения используется бинарный предикат.

#cpp

Подписывайтесь на канал 👉@cod_academy
👍1