LibCode
Kotlin: Корутины (coroutines)
Корутины (coroutines) — это механизм в Kotlin, который позволяет писать асинхронный и неблокирующий код в стиле синхронного программирования. Корутины упрощают работу с асинхронными задачами, такими как сетевые запросы, работа с базами данных и другие длительные операции, без необходимости использования сложных конструкций, таких как коллбэки или потоки.
Асинхронность: Корутины позволяют выполнять длительные операции асинхронно, не блокируя основной поток.
Неблокирующий код: Корутины могут приостанавливаться и возобновляться без блокировки потока, что делает их эффективными для выполнения длительных операций.
Легкость в использовании: Корутины позволяют писать асинхронный код в стиле синхронного программирования, что упрощает чтение и понимание кода.
Пример использования корутин
...
Основные особенности корутин
Асинхронность: Корутины позволяют выполнять длительные операции асинхронно, не блокируя основной поток.
Неблокирующий код: Корутины могут приостанавливаться и возобновляться без блокировки потока, что делает их эффективными для выполнения длительных операций.
Легкость в использовании: Корутины позволяют писать асинхронный код в стиле синхронного программирования, что упрощает чтение и понимание кода.
Пример использования корутин
ВыделитьKotlin
import kotlinx.coroutines.*
fun main() = runBlocking {
println("Start")
// Запуск корутины
launch {
delay(2000) // Приостановка корутины на 2- Жалоба
Kotlin: Как осуществляется переход от списка к ID (Использование XML макетов)
Для примера возьмём список чатов и один чат, к которому будем писать код, чтобы перейти.
Для реализации перехода между списком чатов и конкретным чатом в Kotlin/Android, можно использовать следующий подход:
Список чатов (ChatListActivity/Fragment):
Activity/Fragment чата (ChatActivity):
...
Для реализации перехода между списком чатов и конкретным чатом в Kotlin/Android, можно использовать следующий подход:
Список чатов (ChatListActivity/Fragment):
ВыделитьKotlin
// При клике на элемент списка
chatList.setOnItemClickListener { parent, view, position, id ->
val chatId = chatList[position].id // Получаем id чата
// Создаем Intent для перехода
val intent = Intent(this, ChatActivity::class.java)
intent.putExtra("chat_id", chatId) // Передаем id чата
startActivity(intent)
}Activity/Fragment чата (ChatActivity):
ВыделитьKotlin
class ChatActivity : AppCompatActivity() {
private var chatId: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_chat)
// Получаем переданный id чата
chatId = intent.getIntExtra("chat_id", 0)
// ТеперьPHP: Как определить поворот изображения с помощью exif_read_data()
Что такое EXIF и зачем он нужен
EXIF (Exchangeable Image File Format) — это стандарт, позволяющий добавлять к изображениям и другим файлам метаданные: информацию о камере, настройках съёмки, дате, геолокации и ориентации снимка.
Эти данные записываются камерой или смартфоном при создании фото и могут быть прочитаны специальными инструментами, в том числе PHP‑функцией
exif_read_data().Как EXIF хранит информацию о повороте
Ключевой параметр для определения поворота — поле Orientation (ориентация). Оно принимает значения от
1 до 8, каждое из которых описывает определённое положение камеры при съёмке:
1: нормальное положение (0°);3: повёрнуто на 180°;6: повёрнуто на 90° по часовой стрелке;8: повёрнуто на 90° против часовой стрелки.
Остальные значения (2, 4, 5, 7) описывают зеркальные повороты, которые встречаются реже.
Практический пример на PHP
Шаг 1. Чтение EXIF‑данных
Используйте функцию
exif_read_data(), чтобы получить метаданные изображения:
ВыделитьPHP
$exifData =PHP: Регулярные выражения: Расширенные возможности
Расширенные возможности регулярных выражений в PHP позволяют решать более сложные задачи, такие как обработка текста, очистка данных и защита от уязвимостей. Рассмотрим некоторые из этих возможностей.
Захват групп: Группы позволяют извлекать определенные фрагменты текста:
Обратные ссылки: Обратные ссылки позволяют использовать захваченные группы в замене:
Positive Lookahead: Проверяет, что после текущего положения есть определенный паттерн:
Negative Lookahead: Проверяет, что после текущего положения нет определенного паттерна:
Positive Lookbehind: Проверяет, что...
Захват групп и обратные ссылки
Захват групп: Группы позволяют извлекать определенные фрагменты текста:
ВыделитьPHP
preg_match('/(\d+) (\w+)/', '123 apples', $matches);
// $matches[1] => '123', $matches[2] => 'apples'Обратные ссылки: Обратные ссылки позволяют использовать захваченные группы в замене:
ВыделитьPHP
preg_replace('/(\w+) (\w+)/', '$2, $1', 'John Doe');
// Результат: 'Doe, John'Утверждения (Lookahead и Lookbehind)
Positive Lookahead: Проверяет, что после текущего положения есть определенный паттерн:
ВыделитьPHP
preg_match('/apple(?= pie)/', 'I love apple pie'); // Вернет trueNegative Lookahead: Проверяет, что после текущего положения нет определенного паттерна:
ВыделитьPHP
preg_match('/apple(?! pie)/', 'I love apple juice'); // Вернет truePositive Lookbehind: Проверяет, что...
PHP: Регулярные выражения: Разбор URL с помощью preg_match
Регулярные выражения (регэкспы) — мощный инструмент для работы с текстом, позволяющий решать широкий спектр задач, связанных с поиском, извлечением и обработкой данных. Одна из распространенных задач — разбор URL-адресов, когда нужно извлечь отдельные части (модуль, тип, идентификатор) из URL. В этой статье мы рассмотрим, как это сделать с помощью функции
Рассмотрим шаблон регулярного выражения, который помогает извлечь части URL:
preg_match() в PHP.Пример регулярного выражения
Рассмотрим шаблон регулярного выражения, который помогает извлечь части URL:
ВыделитьPHP
preg_match('%^/(?<module>[-\w\d]+)(?:/(?<type>[-\w\d]+))?(?:/(?<id>[-\w\d]+))?/?$%', $urlPath, $match);Разбор регулярного выражения
%^/: начало строки, после которого идёт косая черта (/).(?<module>[-\w\d]+): именованная группа захвата для выделения модуля. Допускаются буквы, цифры, тире и подчёркивание.(?:/(?<type>[-\w\d]+))?: необязательная группа захвата для типа. Опционально присутствует после косой черты.(?:/(?<id>[-\w\d]+))?: необязательная группа захвата для идентификатора. Опционально
