Зорієнтуйте який контент для вас найрелевантніший
Можна обрати кілька варіантів
Можна обрати кілька варіантів
Anonymous Poll
83%
Інструменти php
56%
Огляд бібліотек
94%
Думки про розробку
50%
Вікторини
28%
Гумористичний контент
8%
Щось ще (пишіть побажання в коментарях)
#course #php #longread
match !== switch
Вже відносно давно — починаючи з PHP 8.0 (а це вже 1,5 роки тому 😳) — зʼявився новий інструмент:
❗️Але це не так.
Сьогодні я спробую пояснити, чому match — це окремий інструмент із своїми перевагами і призначенням.
1️⃣ match повертає значення 🔄
2️⃣ Обовʼязкове покриття всіх кейсів ✅
У
3️⃣ Завжди суворе порівняння (===), а не вільне (==) 🧠
У
☝️
4️⃣ Немає fallthrough і break 🧱
У
Хто не знає про що мова, просто виконайте цей код:
5️⃣ Виховує декларативність ✨
6️⃣ Продуктивність: O(1) доступ по значенню ⚡️
———
Висновки 🎯
❗️Якщо ти ще не використовуєш
Як кажуть: "Відчуй різницю" 😉
match !== switch
Вже відносно давно — починаючи з PHP 8.0 (а це вже 1,5 роки тому 😳) — зʼявився новий інструмент:
match. Але практика співбесід (як джунів, так і мідлів) показує, що багато хто, в кращому випадку, просто знає про нього, але не використовує у повсякденному коді. Основна причина — поверхневе розуміння: існує думка, що це просто ще один синтаксичний цукор над switch чи if/else. ❗️Але це не так.
Сьогодні я спробую пояснити, чому match — це окремий інструмент із своїми перевагами і призначенням.
1️⃣ match повертає значення 🔄
match — це вираз, а не інструкція. Він завжди повертає результат, який потрібно привласнити змінній:$taxRate = match($countryCode) {
'UA' => 0.20,
'PL' => 0.23,
'DE' => 0.19,
default => 0.0,
};switch та if/else, на відміну від цього, нічого не повертають. Якщо ви хочете отримати результат — доводиться оголошувати змінну перед умовою, потім в кожному кейсі встановлювати їй значення.2️⃣ Обовʼязкове покриття всіх кейсів ✅
match зобовʼязує розробника обробити всі можливі варіанти або вказати default. Якщо не вказано відповідність — буде UnhandledMatchError. Це значно знижує ризики неочевидних помилок.$action = match($input) {
'start' => 'Запуск',
'stop' => 'Зупинка',
default => 'Пауза',
};У
switch та if/else будь-який відсутній case просто проігнорується.3️⃣ Завжди суворе порівняння (===), а не вільне (==) 🧠
У
match значення порівнюються суворо — без приведення типів. Це ще один реверанс php в бік суворої типізації і плюс до безпеки та передбачуваності:match(0) {
false => 'false', // ❌ UnhandledMatchError
0 => 'zero', // ✅ буде виконано
};
switch (0) {
case false:
echo 'false'; // ✅ буде виведено
break;
case 0:
echo 'zero'; // ❌ сюди не дійде
break;
}☝️
switch у цьому випадку вибере false як відповідність до 0, що може призвести до неочікуваної поведінки.4️⃣ Немає fallthrough і break 🧱
У
switch завжди є ризик забути break, і тоді код "провалиться" в наступний кейс. Це класичне джерело помилок. У match кожен кейс — це окреме правило, і немає поняття break чи переходу до наступного.Хто не знає про що мова, просто виконайте цей код:
$value = 2;
switch ($value) {
case 1:
echo 'one';
case 2:
echo 'two';
case 3:
echo 'three';
}
5️⃣ Виховує декларативність ✨
match заохочує до декларативного стилю — без зайвої логіки в тілі конструкції. Він не дозволяє писати довгі блоки коду в кожному кейсі, лише вирази. Це змушує структурувати код краще:return match(true) {
$x > 0 => 'позитивне',
$x < 0 => 'негативне',
default => 'нуль',
};6️⃣ Продуктивність: O(1) доступ по значенню ⚡️
match працює аналогічно хеш-мапі: якщо йдеться про скалярні значення (int, float, string, bool), він здійснює пошук у константний час — по складності алгоритму O(1). Це дає велику перевагу над switch, де кожен case порівнюється послідовно (складність алгоритму O(n)):// match — O(1):
$color = match($code) {
'R' => 'Red',
'G' => 'Green',
'B' => 'Blue',
default => 'Unknown',
};
// switch — O(n):
switch ($code) {
case 'R': $color = 'Red'; break;
case 'G': $color = 'Green'; break;
case 'B': $color = 'Blue'; break;
default: $color = 'Unknown';
}
———
Висновки 🎯
match — це не альтернатива switch чи if/else, а окремий інструмент для ситуацій, де важлива чіткість та суворість, тобто для всіх ситуацій з умовами
Він допомагає уникати класичних помилок з switch і заохочує до чистішого, передбачуваного коду
Він швидкий: прості значення шукаються у константний час.
❗️Якщо ти ще не використовуєш
match у повсякденній роботі, саме час спробувати його у своїй наступній задачі. Як кажуть: "Відчуй різницю" 😉
🔥12👌4👍1
Який принцип порушує код з першого коментаря?
Anonymous Quiz
24%
Принцип інверсії залежностей
27%
Принцип інкапсуляції
14%
Принцип єдиної відповідальності
3%
Всі перелічені принципи
32%
Жодного принципу — це валідний код
🤔2🔥1
#game
Всім раночок
1. 👤📦🔐
2. 👴↕️👨🦰↕️👦
3. 🎭🔁🎯
4. 🧠🗺️👻
Якщо здогадалися які чотири поняття тут зашифровані, пишіть в коментарях, але не забувайте приховати відповідь під спойлером
Всім раночок
1. 👤📦🔐
2. 👴↕️👨🦰↕️👦
3. 🎭🔁🎯
4. 🧠🗺️👻
Якщо здогадалися які чотири поняття тут зашифровані, пишіть в коментарях, але не забувайте приховати відповідь під спойлером
👍3
#course #algorithm #series
🧵 Наскільки ефективний мій код? 3/8
O(log n) – Логарифмічна складність
Це одна з найефективніших складностей, яку тільки можна досягти в реальних задачах з великим обсягом даних.
📚 Уявімо, що в нас є телефонна книга з 1 000 000 імен, і ми шукаємо конкретне. Лінійно довелося б перевірити кожне імʼя і це зайняло б безліч часу. Але якщо ми будемо розрізати масив навпіл кожного разу, відкидаючи половину, яка нам точно не підходить — отримаємо двійковий пошук, і результат знайдеться за ~20 кроків. Це й є логарифмічна ефективність.
Такий підхід працює лише з відсортованими даними. І саме це лежить в основі багатьох пошукових і оптимізаційних алгоритмів.
📌 Приклад: Двійковий пошук у відсортованому масиві
🔄 Кожний крок зменшує область пошуку вдвічі. І замість мільйона перевірок — лише кілька десятків. Ось чому O(log n) — максимально швидкий.
⬅️ Попередня складність | Наступна складність ➡️
🧵 Наскільки ефективний мій код? 3/8
O(log n) – Логарифмічна складність
Це одна з найефективніших складностей, яку тільки можна досягти в реальних задачах з великим обсягом даних.
📚 Уявімо, що в нас є телефонна книга з 1 000 000 імен, і ми шукаємо конкретне. Лінійно довелося б перевірити кожне імʼя і це зайняло б безліч часу. Але якщо ми будемо розрізати масив навпіл кожного разу, відкидаючи половину, яка нам точно не підходить — отримаємо двійковий пошук, і результат знайдеться за ~20 кроків. Це й є логарифмічна ефективність.
Такий підхід працює лише з відсортованими даними. І саме це лежить в основі багатьох пошукових і оптимізаційних алгоритмів.
📌 Приклад: Двійковий пошук у відсортованому масиві
function binarySearch($array, $target) {
$left = 0;
$right = count($array) - 1;
while ($left <= $right) {
$middle = floor(($left + $right) / 2);
if ($array[$middle] === $target) return $middle;
if ($array[$middle] < $target) {
$left = $middle + 1;
} else {
$right = $middle - 1;
}
}
return -1;
}🔄 Кожний крок зменшує область пошуку вдвічі. І замість мільйона перевірок — лише кілька десятків. Ось чому O(log n) — максимально швидкий.
🧐 У наступному пості поговоримо про O(n log n) — і як працюють ефективні сортування.
⬅️ Попередня складність | Наступна складність ➡️
👍7
#talks #4students
🫣 Сором — найкращий початок
Зазвичай так почуваються джуни на першому тижні в новому проєкті.
І справді — вкататись у складний проєкт це ще той квест. Давай спробуємо розібратися, як не потонути і швидше «стати своїм».
Перш за все відкинь амбіції і прийми те, що наразі твій value для команди дуже малий, тому твоя мета на перші тижні — не стільки виконувати задачі, скільки навчитися орієнтуватися в проєкті. Хоча задачі теж самі себе не зроблять 😉
1. Ознайомся з Code Style команди та налаштуй IDE так, щоб не витрачати енергію на дрібниці.
2. Поступово ознайомся з тим як виглядає система верхньорівнево, якщо є схеми або документація, починай на них дивитися.
3. Не пірнай одразу в усе. Зосередься на тому, що треба вирішити сьогодні.
4. Якщо на проєкті SOA, тобі потрібна мапа сервісів, які вже існують, за що вони відповідають, але як і в попередній пораді, в першу чергу зосередься на тій області в якій ти будеш виконувати задачі.
5. Ну і, звісно, став запитання, куди ж без цього? Мовчазний джун — це завжди гірше, ніж "надокучливий", адже розумно сформульоване питання — часто надає відповідь автоматично.
Якщо тобі теж соромно від своєї початкової ефективності — це норм.
Хоча ні, не норм - це дуже добре. Бо сором — це сигнал, що ти бачиш планку. А значить — зможеш її перестрибнути.
🫣 Сором — найкращий початок
Який сором. Цього тижня я дуже незадоволений собою. Якось все сумбурно і неструктуровано.
Зазвичай так почуваються джуни на першому тижні в новому проєкті.
І справді — вкататись у складний проєкт це ще той квест. Давай спробуємо розібратися, як не потонути і швидше «стати своїм».
Перш за все відкинь амбіції і прийми те, що наразі твій value для команди дуже малий, тому твоя мета на перші тижні — не стільки виконувати задачі, скільки навчитися орієнтуватися в проєкті. Хоча задачі теж самі себе не зроблять 😉
1. Ознайомся з Code Style команди та налаштуй IDE так, щоб не витрачати енергію на дрібниці.
2. Поступово ознайомся з тим як виглядає система верхньорівнево, якщо є схеми або документація, починай на них дивитися.
3. Не пірнай одразу в усе. Зосередься на тому, що треба вирішити сьогодні.
4. Якщо на проєкті SOA, тобі потрібна мапа сервісів, які вже існують, за що вони відповідають, але як і в попередній пораді, в першу чергу зосередься на тій області в якій ти будеш виконувати задачі.
5. Ну і, звісно, став запитання, куди ж без цього? Мовчазний джун — це завжди гірше, ніж "надокучливий", адже розумно сформульоване питання — часто надає відповідь автоматично.
Якщо тобі теж соромно від своєї початкової ефективності — це норм.
Хоча ні, не норм - це дуже добре. Бо сором — це сигнал, що ти бачиш планку. А значить — зможеш її перестрибнути.
👍5🫡2
#rating
Обираємо найкращий пост тижня
Обираємо найкращий пост тижня
Anonymous Poll
3%
Документація, яку хочеться читати! Але це не точно... 🤷♂️
6%
🧱 Наскільки складним може бути конструктор?
38%
Як запамʼятати зрозуміти патерни проєктування?
16%
Серія: 🧵На скільки ефективний мій код?
3%
🐘Чи може PHP бути функціональною мовою програмування?
22%
match !== switch
13%
🫣 Сором — найкращий початок
🎉 100 підписників!
Дякую кожному і кожній, хто читає, коментує і надсилає свої думки.
Далі буде ще більше корисного контенту та прикладів з реальної розробки, тож запрошуйте ваших друзів і колег, щоб нас ставало ще більше.
🚀 Погнали далі!
І не забувайте донатити на ЗСУ, щоб у нас і далі була можливість працювати
💙💛🇺🇦♥️🖤
Дякую кожному і кожній, хто читає, коментує і надсилає свої думки.
Далі буде ще більше корисного контенту та прикладів з реальної розробки, тож запрошуйте ваших друзів і колег, щоб нас ставало ще більше.
🚀 Погнали далі!
І не забувайте донатити на ЗСУ, щоб у нас і далі була можливість працювати
💙💛🇺🇦♥️🖤
🎉23
#game
Всім доброго ранку
Сьогодні в нас щось, що дуже полюбляє Laravel:
🪄📦📤
Не забувайте приховувати відповіді під спойлером 😉
UPD: слово "магічний" вже вгадали
Напевно підказка про Laravel збиває вас з пантелику
Це словосполучення на співбесіді може звучати так:
Загаданий один з них.
Всім доброго ранку
Сьогодні в нас щось, що дуже полюбляє Laravel:
🪄📦📤
Не забувайте приховувати відповіді під спойлером 😉
UPD: слово "магічний" вже вгадали
Напевно підказка про Laravel збиває вас з пантелику
Це словосполучення на співбесіді може звучати так:
"Які магічні .... в PHP ти знаєш?"
Загаданий один з них.
#tools #phpstorm #ai
🤖 AI в PhpStorm: GPT, що вам допомагає
JetBrains вже давно робить одне з найкращих середовищ для PHP-розробки, але з появою AI Assistant це IDE вийшло на новий рівень. Якщо коротко — це ChatGPT, який інтегровано прямо в PhpStorm і який «знає», де ви і над чим працюєте (за умови, що ви надасте йому доступ до коду).
Я спробував його в роботі, і мені дуже сподобався здобуток, який я отримав від цього, але про все по порядку:
💧 Трохи холодного душу:
Це платна функція. І ні, він не можете підключається до вашої вже оплаченої підписки ChatGPT Plus або API.
JetBrains продає це як окрему послугу, тож якщо ви хочете мати GPT прямо у редакторі — доведеться платити додаткові $10 на місяць, або користуватися безкоштовним планом, але з обмеженнями.
Спойлер: здебільшого лімітів безкоштовного плану вистачає на щоденну роботу, якщо ви все ж вмієте писати код самостійно.
🔧 Що вміє AI Assistant у PhpStorm?
1️⃣ Пояснення коду
Виділяєш фрагмент →
2️⃣ Генерація тестів
З того ж меню можна згенерувати PHPUnit-тести. Іноді сирувато, але як шаблон — дуже зручно.
3️⃣ Написання докблоків і коментарів
Виділяєш метод — AI підписує, що це за метод, які параметри, що повертає. Все у звичному форматі @param, @return.
4️⃣ Refactor this with AI
Можна делегувати покращення методу, перейменування змінних, винесення залежностей — AI запропонує варіанти.
5️⃣ Відповіді на питання
Вбудований чат, який памʼятає файл, з яким ти працюєш. Наприклад:
🧪 Приклад використання
Виділяємо метод →
або
Виділяєш метод →
❓Навіщо це потрібно?
✅ Краще розуміння коду для тих, хто ще погано його читає
✅ Позбавлення рутинної роботи
✅ Швидкий фідбек прямо у редакторі, без переключень у браузер при наявності питань
🏁 Висновок
А ти вже пробував AI у своєму штормі? Чи ще з недовірою дивишся на це все? 😏
Поділися в коментах своїм досвідом!
🤖 AI в PhpStorm: GPT, що вам допомагає
JetBrains вже давно робить одне з найкращих середовищ для PHP-розробки, але з появою AI Assistant це IDE вийшло на новий рівень. Якщо коротко — це ChatGPT, який інтегровано прямо в PhpStorm і який «знає», де ви і над чим працюєте (за умови, що ви надасте йому доступ до коду).
Я спробував його в роботі, і мені дуже сподобався здобуток, який я отримав від цього, але про все по порядку:
💧 Трохи холодного душу:
Це платна функція. І ні, він не можете підключається до вашої вже оплаченої підписки ChatGPT Plus або API.
JetBrains продає це як окрему послугу, тож якщо ви хочете мати GPT прямо у редакторі — доведеться платити додаткові $10 на місяць, або користуватися безкоштовним планом, але з обмеженнями.
Спойлер: здебільшого лімітів безкоштовного плану вистачає на щоденну роботу, якщо ви все ж вмієте писати код самостійно.
🔧 Що вміє AI Assistant у PhpStorm?
1️⃣ Пояснення коду
Виділяєш фрагмент →
Alt+Enter → Explain code with AI. AI коротко пояснює, що тут відбувається (враховуючи контекст).2️⃣ Генерація тестів
З того ж меню можна згенерувати PHPUnit-тести. Іноді сирувато, але як шаблон — дуже зручно.
3️⃣ Написання докблоків і коментарів
Виділяєш метод — AI підписує, що це за метод, які параметри, що повертає. Все у звичному форматі @param, @return.
4️⃣ Refactor this with AI
Можна делегувати покращення методу, перейменування змінних, винесення залежностей — AI запропонує варіанти.
5️⃣ Відповіді на питання
Вбудований чат, який памʼятає файл, з яким ти працюєш. Наприклад:
"Що робить цей код?"
"Як тут зменшити складність алгоритму?"
"Чому тут краще не використовувати isset?"
🧪 Приклад використання
class DiscountCalculator
{
public function calculate(float $price, int $percentage): float
{
return $price * (1 - $percentage / 100);
}
}
Виділяємо метод →
Explain code with AI"Цей метод обчислює знижку у відсотках і повертає нову ціну. Якщо передати 100 грн і 20%, то метод поверне 80."
або
Виділяєш метод →
Alt+Enter → Generate Unit Testspublic function testCalculate(): void
{
$calc = new DiscountCalculator();
$this->assertSame(80.0, $calc->calculate(100.0, 20));
}
❓Навіщо це потрібно?
✅ Краще розуміння коду для тих, хто ще погано його читає
✅ Позбавлення рутинної роботи
✅ Швидкий фідбек прямо у редакторі, без переключень у браузер при наявності питань
🏁 Висновок
AI Assistant у PhpStorm — дійсно зручний інструмент, який зберігає мені близько години в день.
Він допомагає впевненіше працювати з legacy-кодом, чужими репозиторіями або коли ти просто хочеш трохи розвантажити голову.
А ти вже пробував AI у своєму штормі? Чи ще з недовірою дивишся на це все? 😏
Поділися в коментах своїм досвідом!
🔥3❤1
#course #algorithm #series
🧵Наскільки ефективний мій код? 4/8
O(n log n) – Лінійно-логарифмічна складність
Це оптимальна складність для більшості алгоритмів сортування. Ви не зможете стабільно сортувати швидше, ніж O(n log n), якщо не знаєте чогось специфічного про вхідні дані.
📌 Приклад: Сортування злиттям (Merge Sort)
⛏️ Рекурсія ділить масив навпіл до базового випадку (елемент або два), після чого їх зливає у правильному порядку. Цей підхід дозволяє досягти складності O(n log n) — бо log n — це глибина рекурсії, а n — злиття всіх елементів на кожному рівні.
🧠 Якщо бачите рекурсію + злиття / обʼєднання / ітерацію — майже завжди це O(n log n).
⬅️ Попередня складність | Наступна складність ➡️
🧵Наскільки ефективний мій код? 4/8
O(n log n) – Лінійно-логарифмічна складність
Це оптимальна складність для більшості алгоритмів сортування. Ви не зможете стабільно сортувати швидше, ніж O(n log n), якщо не знаєте чогось специфічного про вхідні дані.
📌 Приклад: Сортування злиттям (Merge Sort)
function mergeSort($array) {
if (count($array) <= 1) return $array;
$middle = floor(count($array) / 2);
$left = mergeSort(array_slice($array, 0, $middle));
$right = mergeSort(array_slice($array, $middle));
return merge($left, $right);
}
function merge($left, $right) {
$result = [];
while (count($left) && count($right)) {
$result[] = $left[0] < $right[0] ? array_shift($left) : array_shift($right);
}
return array_merge($result, $left, $right);
}⛏️ Рекурсія ділить масив навпіл до базового випадку (елемент або два), після чого їх зливає у правильному порядку. Цей підхід дозволяє досягти складності O(n log n) — бо log n — це глибина рекурсії, а n — злиття всіх елементів на кожному рівні.
🧠 Якщо бачите рекурсію + злиття / обʼєднання / ітерацію — майже завжди це O(n log n).
У наступному пості — O(n^2) — і чому вкладені цикли часто погана ідея.
⬅️ Попередня складність | Наступна складність ➡️
#game
Ранок
Сьогодні дуже легке поняття
Адепти Symfony тут?
👂🎉
І поки пʼєте каву та думаєте над ребусом, задонатьте на русоріз чи на будь який інший збір, щоб ми і далі могли просинатися в своїх домівках 💙💛
Ранок
Сьогодні дуже легке поняття
Адепти Symfony тут?
👂🎉
І поки пʼєте каву та думаєте над ребусом, задонатьте на русоріз чи на будь який інший збір, щоб ми і далі могли просинатися в своїх домівках 💙💛
👍4
#talks
🏷 Чому канал називається саме так?
Кількість разів, коли мені ставили це запитання наближається до десятка, тому напишу пост, щоб не відповідати всім одне й те саме, а кидати посилання на нього.
Назва "Створений щоб помирати" — це не тролінг і не випадковий вираз.
Це відгук мого філософського ставлення до світу навколо: все має початок і кінець, і в цьому є назвичайна сила.
Колись ходила напівжартівлива але безумовно хейтерська фраза, що "PHP створений щоб померти". Її кидали в обличчя як образу: мовляв, мова не оптимізована, процеси неефективні, ресурси жере. І можливо десь так воно й було тоді, але це дійсно частина природи PHP: він створює процес, виконує роботу і помирає, вивільняючи ресурси. Як і розробники, адже людина не живе вічно, але доки існує — робить свою справу (гарно чи ні, це вже окрема справа).
Саме тому я вирішив назвати канал саме так. Не щоб знецінити PHP — а щоб перехопити контроль.
Є гарний приклад, який мені подобається, в фільмі 2010 року "Надто крута для тебе (She's Out of My League) був персонаж Венделл який сам себе називав "Засцика" (Stainer).
Він пояснює походження свого прізвиська так: в дитинстві він мав проблему — мочився в штани. Щоб уникнути знущань, він сам почав називати себе "Засцика", таким чином позбавляючи інших можливості образити його цим. Він перетворив колишню слабкість на ідентичність.
Так і з цією назвою — це прийняття. І трохи самоіронії. Але з любов’ю до цієї чудової мови програмування.
🏷 Чому канал називається саме так?
Кількість разів, коли мені ставили це запитання наближається до десятка, тому напишу пост, щоб не відповідати всім одне й те саме, а кидати посилання на нього.
Назва "Створений щоб помирати" — це не тролінг і не випадковий вираз.
Це відгук мого філософського ставлення до світу навколо: все має початок і кінець, і в цьому є назвичайна сила.
Колись ходила напівжартівлива але безумовно хейтерська фраза, що "PHP створений щоб померти". Її кидали в обличчя як образу: мовляв, мова не оптимізована, процеси неефективні, ресурси жере. І можливо десь так воно й було тоді, але це дійсно частина природи PHP: він створює процес, виконує роботу і помирає, вивільняючи ресурси. Як і розробники, адже людина не живе вічно, але доки існує — робить свою справу (гарно чи ні, це вже окрема справа).
Саме тому я вирішив назвати канал саме так. Не щоб знецінити PHP — а щоб перехопити контроль.
Є гарний приклад, який мені подобається, в фільмі 2010 року "Надто крута для тебе (She's Out of My League) був персонаж Венделл який сам себе називав "Засцика" (Stainer).
Він пояснює походження свого прізвиська так: в дитинстві він мав проблему — мочився в штани. Щоб уникнути знущань, він сам почав називати себе "Засцика", таким чином позбавляючи інших можливості образити його цим. Він перетворив колишню слабкість на ідентичність.
Так і з цією назвою — це прийняття. І трохи самоіронії. Але з любов’ю до цієї чудової мови програмування.
👍11❤4🔥1
#course #algorithm #series
🧵Наскільки ефективний мій код? 5/8
O(n^2) – Квадратична складність
Це вже повільно. Алгоритми з O(n^2) мають вкладені цикли, і час виконання зростає квадратично відносно розміру вхідних даних.
📌 Приклад: Сортування бульбашкою (Bubble Sort)
👀 Кожен елемент перевіряється з кожним — от і квадратична складність. Якщо масив має 1000 елементів — буде до мільйона операцій.
⚠️ Будь-який вкладений цикл — тривожний дзвіночок. У реальному коді O(n^2) трапляється при порівнянні всіх з усіма: наприклад, фільтрація перетинів, дублікати, агрегації без індексів.
🧠 Часом уникнути O(n^2) не вийде, але щойно бачите подвійний цикл — варто хоча б запитати себе: а чи немає кращого способу?
⬅️ Попередня складність | Наступна складність ➡️
🧵Наскільки ефективний мій код? 5/8
O(n^2) – Квадратична складність
Це вже повільно. Алгоритми з O(n^2) мають вкладені цикли, і час виконання зростає квадратично відносно розміру вхідних даних.
📌 Приклад: Сортування бульбашкою (Bubble Sort)
function bubbleSort($array) {
$n = count($array);
for ($i = 0; $i < $n - 1; $i++) {
for ($j = 0; $j < $n - $i - 1; $j++) {
if ($array[$j] > $array[$j + 1]) {
$temp = $array[$j];
$array[$j] = $array[$j + 1];
$array[$j + 1] = $temp;
}
}
}
return $array;
}👀 Кожен елемент перевіряється з кожним — от і квадратична складність. Якщо масив має 1000 елементів — буде до мільйона операцій.
⚠️ Будь-який вкладений цикл — тривожний дзвіночок. У реальному коді O(n^2) трапляється при порівнянні всіх з усіма: наприклад, фільтрація перетинів, дублікати, агрегації без індексів.
🧠 Часом уникнути O(n^2) не вийде, але щойно бачите подвійний цикл — варто хоча б запитати себе: а чи немає кращого способу?
📌 Завтра поговоримо про O(n^3) — кубічну складність. Це вже зовсім важка артилерія.
⬅️ Попередня складність | Наступна складність ➡️
👍5
#game
Новий ранок — новий ребус
💾📏
Нікому не побажаю на це наштовхуватися в проді
І якщо в тебе є 3 хвилини на каву і ребус, знайди 1 хвилину і зроби ранковий 🍩 на русо🔪, щоб кожен окупант отримав по дрону в пику
upd: другий смайл то лінійка
Новий ранок — новий ребус
💾📏
Нікому не побажаю на це наштовхуватися в проді
І якщо в тебе є 3 хвилини на каву і ребус, знайди 1 хвилину і зроби ранковий 🍩 на русо🔪, щоб кожен окупант отримав по дрону в пику
upd: другий смайл то лінійка
👍1👏1
#course #php #php8_5 #talks #4students
А хіба current() та end() вже не справляються❓
На одній з персональних консультацій ми з одним з підписників обговорювали статтю про нововведення в PHP 8.5, зокрема появу функцій
У нього виникло питання:
І раптом я подумав, що це питання може виникнути не тільки в нього, бо може здатися, що
Тому я вирішив написати короткий пост, щоб розкласти все по поличках 👇
Функції
Тобто функція
Концептуальний приклад:
Ми хочемо вивести всі елементи масиву, якщо останній елемент не "d"
Але на екран виведеться тильки 'c'
✅
Нові функції будуть завжди повертати перше або останнє значення без побічних ефектів.
Вони не змінюють стан вказівника і не залежать від нього:
📌 PHP продовжує розвиватися в бік декларативного і безпечного коду, і ці нові функції — це не "зайве", а ще один крок до меншої кількості багів.
Якщо помітили у себе в коді
А хіба current() та end() вже не справляються❓
На одній з персональних консультацій ми з одним з підписників обговорювали статтю про нововведення в PHP 8.5, зокрема появу функцій
array_first() та array_last().У нього виникло питання:
“А навіщо це потрібно, якщо є current() і end()?”
І раптом я подумав, що це питання може виникнути не тільки в нього, бо може здатися, що
current() та end() роблять те саме.Тому я вирішив написати короткий пост, щоб розкласти все по поличках 👇
Функції
current() справді повертає перший елемент, а end() останній елемент масиву, але тільки після того, як зрушують внутрішній вказівник масиву. Це означає, що:$array = ['a', 'b', 'c', 'd'];
echo current($array); // 'a'
echo next($array); // 'b'
echo current($array); // 'b', а не 'a'
echo end($array); // 'd'
echo current($array); // 'd' а не 'a'
Тобто функція
current() повертає не перший елемент масиву, а той, на який вказує вказівник, а end() останній елемент масиву, але при цьому переставляє на нього внутрішній вказівник масиву, що в свою чергу може привезти до непередбачуванних наслідків.Концептуальний приклад:
Ми хочемо вивести всі елементи масиву, якщо останній елемент не "d"
$array = ['a', 'b', 'c'];
if (end($array) !== 'd') { // але вказівник вже перемістився на 'c'
while ($item = current($array)) {
echo $item . PHP_EOL;
next($array);
}
}
Але на екран виведеться тильки 'c'
✅
array_first() та array_last() — декларативні та передбачуваніНові функції будуть завжди повертати перше або останнє значення без побічних ефектів.
Вони не змінюють стан вказівника і не залежать від нього:
$array = ['a', 'b', 'c'];
array_first($array); // 'a'
array_last($array); // 'c'
// Незалежно від вказівника
next($array);
array_first($array); // все ще 'a'
📌 PHP продовжує розвиватися в бік декларативного і безпечного коду, і ці нові функції — це не "зайве", а ще один крок до меншої кількості багів.
Якщо помітили у себе в коді
current() чи end() — можливо, час подивитись на них під новим кутом.SensioLabs
What's New in PHP 8.5: A Comprehensive Overview
PHP 8.5 will be released in November 2025 and brings several useful new features and improvements. This version focuses on developer experience enhancements, new utility functions, and better debug...
❤5👍4
#course #algorithm #series
🧵Наскільки ефективний мій код? 6/8
O(n³) – Кубічна складність
Тут вже все дуже серйозно. Алгоритми з O(n³) використовують три вкладені цикли. Це означає, що при зростанні розміру даних, час виконання збільшується в кубі.
📌 Приклад: Множення двох матриць
📊 Звучить академічно, але трапляється частіше, ніж здається: в обчисленнях, побудові графів, пошуку комбінацій. Усе, що потребує порівняння трійок даних або тривимірних структур — кандидати на O(n³).
⚠️ Це вже критична точка. Якщо можете уникнути такого коду — уникайте. Часто можна знайти способи звести це до O(n²) або навіть O(n log n).
⬅️ Попередня складність | Наступна складність ➡️
🧵Наскільки ефективний мій код? 6/8
O(n³) – Кубічна складність
Тут вже все дуже серйозно. Алгоритми з O(n³) використовують три вкладені цикли. Це означає, що при зростанні розміру даних, час виконання збільшується в кубі.
📌 Приклад: Множення двох матриць
function matrixMultiplication($matrixA, $matrixB) {
$rowsA = count($matrixA);
$colsA = count($matrixA[0]);
$colsB = count($matrixB[0]);
$result = [];
for ($i = 0; $i < $rowsA; $i++) {
for ($j = 0; $j < $colsB; $j++) {
$result[$i][$j] = 0;
for ($k = 0; $k < $colsA; $k++) {
$result[$i][$j] += $matrixA[$i][$k] * $matrixB[$k][$j];
}
}
}
return $result;
}📊 Звучить академічно, але трапляється частіше, ніж здається: в обчисленнях, побудові графів, пошуку комбінацій. Усе, що потребує порівняння трійок даних або тривимірних структур — кандидати на O(n³).
⚠️ Це вже критична точка. Якщо можете уникнути такого коду — уникайте. Часто можна знайти способи звести це до O(n²) або навіть O(n log n).
📌 Завтра поговоримо про O(2ⁿ) — експоненціальну складність. І це вже не жарти.
⬅️ Попередня складність | Наступна складність ➡️
🔥2👍1😁1
#question
Яке твердження про trait є хибним?
Яке твердження про trait є хибним?
Anonymous Quiz
9%
Можна перевизначити метод trait-а у класі.
11%
Trait може містити властивості.
28%
Trait можна комбінувати з use всередині іншого trait.
47%
Trait автоматично включається до кожного дочірнього класу.
6%
Метод із trait-а викликається як звичайний метод класу.
👍2🥱1
#game #dictionary34
☕️ Доброго ранку!
Сьогодні в нас нова ранкова активність — «Три-чотири» 🧠
Правила прості:
🔹поясни поняття в трьох, максимум чотирьох словах
🔹можна правильно, а можна смішно
🔹кількість коментарів не обмежена
🔹кожну версію пиши в окремому коментарі
💬 Відповідь, що набере більше всього вподобайок увійде до словника, який я буду збирати!
🎯 Поняття дня:
По одній з версій, це:
👇 Пиши свою версію в коментарях.
---
🇺🇦 Якщо ти в тилу, закинь свої 2 гривні на ЗСУ в будь-який фонд, якому довіряєш!
Допоможи нашому війську стати сильнішим 💪
☕️ Доброго ранку!
Сьогодні в нас нова ранкова активність — «Три-чотири» 🧠
Правила прості:
🔹поясни поняття в трьох, максимум чотирьох словах
🔹можна правильно, а можна смішно
🔹кількість коментарів не обмежена
🔹кожну версію пиши в окремому коментарі
💬 Відповідь, що набере більше всього вподобайок увійде до словника, який я буду збирати!
🎯 Поняття дня:
Легасі код
По одній з версій, це:
Неясно як, але працює
👇 Пиши свою версію в коментарях.
---
🇺🇦 Якщо ти в тилу, закинь свої 2 гривні на ЗСУ в будь-який фонд, якому довіряєш!
Допоможи нашому війську стати сильнішим 💪
👍1