LibCode»Блог

LibCode — это библиотека кода и знаний для разработчиков, где каждый найдет полезные ресурсы, уроки и инструменты для создания и совершенствования своих проектов.

SQL | PHP | Kotlin | Python | C++ | JavaScript

Как обновить старый синтаксис PHP-обработчиков (Стрелочные функции)

PHP
В старых PHP-проектах (Особенно в движках форумов и CMS, написанных в 2010‑х) часто встречается однотипный шаблон: обработка BBCode через preg_replace_callback с обычными анонимными функциями, где для доступа к $this приходится использовать конструкцию use($this).

Такой код рабочий, но визуально тяжёлый и избыточный. Современный PHP (начиная с версии 7.4) позволяет сделать его чище, лаконичнее и удобнее в поддержке — за счёт стрелочных функций.

Что было раньше: Классический синтаксис


Типичный старый вариант выглядит так:
$text = preg_replace_callback(
    '/\[url(.*?)\](.*?)\[\/url\]/is',
    function($match) use ($this) {
        return $this->_link($match[1], $match[2]);
    },
$text);

Здесь три «лишних» элемента:
  1. Ключевое слово function — многословно.
  2. Явное указание use ($this) — избыточно, потому что $this нужен почти всегда.
  3. Фигурные скобки и оператор return — занимают строки, не добавляя смысла.

Это не ошибка, но в проектах с десятками подобных обработчиков такой стиль делает...

Kotlin: Как вывести данные для проверки

При написании приложения может потребоваться проверить данные, как они были обработаны. Для этого, за частую, достаточно их просто увидеть. В этом нам поможет класс Gson. Чтобы его использовать, необходимо импортировать:
import android.util.Log

Если, по каким то причинам его у вас до сих пор нет, добавляем в "build.gradle.kts":
implementation("com.google.code.gson:gson:xx.xx.xx")

  • xx.xx.xx: Указывайте актуальную версию.

После чего, если потребуется, пересоберите проект. И выводите нужные данные так:
Gson().toJson(data)

В лог выводим так:
Log.d("Data", Gson().toJson(data))

Импорт логирования:
import android.util.Log

В логе увидите строку с данными.

...

SQL: Как создать индекс

SQL
Сразу к примеру! Индекс создаётся при помощи запроса:
CREATE INDEX имяИндекса ON имяТаблицы (имяПоля);

Например создаём индекс с названием userIndex, для поля userId, в таблице users:
CREATE INDEX userIndex ON users (userId);


...

Kotlin: Стандартные индикаторы загрузки

В Jetpack Compose есть несколько стандартных индикаторов загрузки:
  1. CircularProgressIndicator: Классический круговой индикатор.
  2. LinearProgressIndicator: Линейный индикатор.
  3. ActivityIndicator: Простой вращающийся индикатор.

Примеры их использования:
// Круговой индикатор
CircularProgressIndicator(
    modifier = Modifier
        .size(40.dp)
        .padding(16.dp),
    color = MaterialTheme.colorScheme.primary
)

// Линейный индикатор
LinearProgressIndicator(
    progress = 0.5f, // значение от 0 до 1
    modifier = Modifier
        .height(4.dp)
        .fillMaxWidth()
        .padding(16.dp)
)

// Простой индикатор активности
ActivityIndicator(
    modifier = Modifier
        .size(40.dp)
        .padding(16.dp),
    color = MaterialTheme.colorScheme.primary
)


Дополнительные возможности настройки:
  • Изменение размера через модификатор size().
  • Настройка цвета через параметр color.
  • Анимация прогресса для LinearProgressIndicator.
  • Стилизация через темы Material
...

Kotlin: Как получить часовой пояс устройства

В Kotlin можно получить часовой пояс пользователя несколькими способами.

Через TimeZone


val timeZone = TimeZone.getDefault()
val timeZoneId = timeZone.id // например: "Europe/Moscow"
val offset = timeZone.rawOffset / (1000 * 60 * 60) // смещение в часах

Через ZoneId (Рекомендуемый способ)


import java.time.ZoneId

val zoneId = ZoneId.systemDefault()
val zoneIdString = zoneId.toString() // например: "Europe/Moscow"

Через Calendar


import java.util.Calendar

val calendar = Calendar.getInstance()
val timeZone = calendar.timeZone
val offset = timeZone.getRawOffset()

Через LocalDateTime


import java.time.LocalDateTime
import java.time.ZoneId

val currentTime = LocalDateTime.now(ZoneId.systemDefault())

Примеры использования



Получение названия часового пояса
fun getUserTimeZone(): String {
    return ZoneId.systemDefault().toString()
}

Получение смещения от UTC
fun getTimeZoneOffset(): Int {
    val zone =
...