Простір для вивчення нової професії, зростання в кар’єрі або розвитку бізнесу👇🏻
Наша команда пише для вас найкращі та найцікавіші матеріали, які обов’язково допоможуть у вашому навчанні: https://genius.space/lab/
Last updated 1 month, 2 weeks ago
Закриваємо мобільну середу несподівано новиною від Nintendo.
Тут Nintendo випустили свій музичний стримінговий сервіс. Можна знайти безліч мелодій з основних франшиз, плейлисти для настрою, зациклити улюблену мелодію з гри до години в довжину і створювати свої власні плейлисти. Можна навіть попросити не показувати музику, якої ще не було під час вашого проходження цієї самої гри, щоб не схопити спойлерів, так би мовити.
Усе це доступно безкоштовно і на iOS, і на Android, якщо у вас є підписка Switch Online.
#iOSКомпас **🧭
7️⃣*5️⃣ Завдання 75
Які патерни в об’єктно-орієнтованому проєктуванні ви знаєте?***
З вами знову той самий автор каналу @badlinkschannel. Сподіваюсь вам ще не набридла ця ідея капітана галери про iOS розробника.
🤔 В ООП існує багато патернів, які допомагають вирішувати типові задачі проєктування та розробки ПЗ. Патерни проєктування представляють собою перевірені рішення частих проблем, з якими стикаються розробники. Вони сприяють написанню чистішого, зрозумілого та масштабованого коду. Основні категорії патернів включають породжуючі, структурні та поведінкові патерни.
🔣 Породжуючі патерни
Ці патерни пов’язані з процесами створення об’єктів, роблячи систему незалежною від способу створення та компонування об’єктів:
➖ Одинак (Singleton): Забезпечує створення лише одного екземпляра класу та надає глобальну точку доступу до нього.
➖ Фабричний метод (Factory Method): Визначає інтерфейс для створення об’єкта, але залишає підкласам вибір, який клас інстанціювати.
➖ Абстрактна фабрика (Abstract Factory): Надає інтерфейс для створення сімейств взаємопов’язаних об’єктів без уточнення їх конкретних класів.
➖ Прототип (Prototype): Дозволяє копіювати існуючі об’єкти, не залежачи від їх класів.
➖ Будівник (Builder): Дозволяє створювати складні об’єкти поетапно, використовуючи один процес для отримання різних представлень.
🔣 Структурні патерни
Ці патерни описують, як об’єднувати об’єкти та класи у більш великі структури:
➖ Адаптер (Adapter): Дозволяє об’єктам з несумісними інтерфейсами працювати разом.
➖ Міст (Bridge): Розділяє абстракцію та реалізацію, щоб їх можна було змінювати незалежно.
➖ Композиція (Composite): Об’єднує об’єкти у деревовидні структури для представлення ієрархій “частина-ціле”.
➖ Декоратор (Decorator): Динамічно додає об’єктам нові обов’язки без зміни їхньої реалізації.
➖ Фасад (Facade): Надає простий інтерфейс до складної системи класів або фреймворку.
➖ Проксі (Proxy): Створює замінник для контролю доступу до об’єкта.
🔣 Поведінкові патерни
Ці патерни регулюють взаємодію та розподіл обов’язків між об’єктами:
➖ Спостерігач (Observer): Створює механізм підписки, що дозволяє об’єктам реагувати на події, які відбуваються в інших об’єктах.
➖ Стратегія (Strategy): Визначає сімейство алгоритмів, інкапсулює кожен з них і робить їх взаємозамінними.
➖ Стан (State): Дозволяє об’єкту змінювати свою поведінку залежно від стану.
➖ Команда (Command): Перетворює запити на об’єкти, що дозволяє передавати їх як аргументи, ставити в чергу або логувати.
➖ Ланцюжок обов’язків (Chain of Responsibility): Дозволяє передавати запити послідовно по ланцюжку обробників, поки один із них не обробить запит.
➖ Посередник (Mediator): Зменшує взаємозв’язок між класами, виносячи взаємодію між ними у клас-посередник.
#️⃣ Ці патерни допомагають вирішувати типові задачі проєктування, роблячи код більш читабельним, зручним для підтримки та масштабованим.
#ЧарівнийКомпас **🧭
1️⃣*6️⃣3️⃣ Завдання 163
Як би ви тестували купони знижок?***
🤔 Купони знижок – ще одна велика ділянка де може виникнути велика кількість багів. Тому ставитись до тестування цього функціоналу треба з великою увагою.
🔣 Починаємо з тестування базових функцій:
➖ Перевіряємо застосування дійсного коду на знижку.
➖ Перевіряємо видалення коду на знижку.
➖ Застосовуємо код на знижку, видаляємо його до процесу оплати, застосовуємо знову.
🔣 Перевіряємо різноманітні умови коду на знижку:*➖Перевіряємо код на фіксовану знижку (5, 10, 50, 100 гривень тощо).
➖ Перевіряємо код на знижку у %.
➖*** Перевіряємо коди із лімітом, наприклад 10%, але не більше 100 гривень.
🔣 Додаткові перевірки:
➖ Перевіряємо код зі знижкою на мінімальну покупку. Наприклад код працює, тільки за умовою покупки на 300 гривень чи більше.
➖ Перевіряємо код на певний товар чи певну групу товарів. Чи буде він працювати на інші?
➖ Перевіряємо код, який працює тільки для нових клієнтів та першу їх покупку.
➖ Перевіряємо одноразові коди. Чи можливо використовувати код ще один раз, після того, як його вже використали.
➖ Перевіряємо коди із терміном дії. Чи можна їх використовувати після їх закінчення та у день їх закінчення.
➖ Пробуємо застосувати кільки різноманітних кодів на знижки та переглядаємо математику підрахунків.
➖ Перевіряємо як коди функціонують із різноманітними способами доставки. У більшості кейсів, код повинен ігнорувати вартість доставки та змінювати тільки ціну на сам товар.
➖ Перевіряємо як розраховуються податки відносно застосованого коду.
➖ Перевіряємо коди які дають знижку більше, а ніж вартість товару. Наприклад, товар коштує 50 гривень, а знижка у нас на 100.
➖ Коли в кошику є товари, які попадають під умови коду, та ті які не попадають.
🔣 Крім цього не забувайте перевірити:
➖ Як система реагує на недійсний код.
➖ Чутливість до регістру.
#️⃣ Насамперед ще є багато кейсів, які можна придумати із кодами для знижок, як ви знаєте все протестувати не можливо. Але переліку зверху вже буде достатньо, щоб показати, що ви йдете у правильному напрямку на співбесіді.
Продовжуємо тиждень анонсів від єпл. На цей раз це макбуки про з новою лінійкою процессорів м4, м4про, м4мах. Як завжди краще та швидше все. Навіть тандерболт5 завезли та Wi-Fi 6E + Bluetooth 5.3. Ціна від 1599 до 3199 за 14" та від 2499 до 3999 за 16".
14" стартують з Ram 16гб та SSD 512гб
16" стартують з Ram 24гб та SSD 512гб
ПК бояри зрадійте. Після 14 років бета-тестування 😐 у вас з'явиться Red Dead Redemption. Зате відразу в 4к і 144 Гц. Гра культова, я б сказав, тож не пропустіть.
#iOSКомпас **🧭
7️⃣*4️⃣ Завдання 74
Що таке Auto Layout?***
З вами знову той самий автор каналу @badlinkschannel. Не забувайте підписатися. А ми продовжуємо наші яблучні історіі.
🤔 Auto Layout — це система компонування, що дозволяє створювати динамічний та адаптивний користувацький інтерфейс, який коректно відображається на різних пристроях та в різних орієнтаціях екрану без необхідності ручного розрахунку розмірів та позицій елементів інтерфейсу. Вона використовує набір обмежень (constraints
) для визначення розмірів та положення елементів інтерфейсу.
Обмеження описують взаємозв’язки між елементами інтерфейсу, а також між елементами й батьківським контейнером. Ці взаємозв’язки можуть включати розміри, положення та інші атрибути візуальних елементів. Обмеження можна задавати програмно в Swift або візуально за допомогою Interface Builder у Xcode.
🤓 Приклади обмежень:
➖ Елемент A має бути на відстані 20 пунктів від верхньої межі батьківського представлення.
➖ Ширина елемента B має дорівнювати половині ширини батьківського представлення.
➖ Елемент C має бути вирівняний по центру горизонтально щодо батьківського представлення.
Auto Layout автоматично обчислює розмір і положення всіх елементів на основі заданих обмежень, що робить інтерфейс гнучким і адаптивним до різних розмірів екранів і орієнтацій.
👍 Переваги:
➖ Адаптивність: Інтерфейс автоматично підлаштовується під різні розміри екранів і орієнтації.
➖ Динамічність: Інтерфейс може реагувати на зміни контенту, наприклад, при локалізації або зміні контенту в реальному часі.
➖ Зручність підтримки: Зменшується необхідність у створенні специфічних рішень для різних пристроїв або орієнтацій, що спрощує підтримку та оновлення застосунку.
😖 Недоліки:
➖ Складність: Новачкам може бути складно зрозуміти та правильно використовувати всі можливості Auto Layout.
➖ Продуктивність: У складних інтерфейсах із великою кількістю обмежень можливе зниження продуктивності, особливо при динамічній зміні інтерфейсу.
#️⃣ Auto Layout — це потужна система для створення динамічних і адаптивних інтерфейсів на основі обмежень, яка дозволяє елементам інтерфейсу автоматично змінювати свої розміри та положення залежно від умов екрану.
Ну і закінчимо мобільну середу теж новиною від Apple. Apple планує революцію у світі розумного будинку - екрани всюди.
Йдеться про девайси з екранами, які можна буде розставити по всьому будинку. Усе це буде з підтримкою HomeOS. Крім цього компанія розробляє такий собі «роботизований пристрій». На додачу екосистему розумного будинку від Apple планують зробити більш відкритою, з підтримкою більшої кількості девайсів сторонніх виробників. Зараз усією цією справою займається нова команда - Home Ecosystem.
Продовжуємо мобільну середу ще однією новиною від Apple. Там ще одна втрата, цього разу йде керівник з персоналу.
Керол Серфейс очолила цей напрямок 2 роки тому. Замість неї відповідатиме за цей напрямок знову Дейрдре О'Браєн. Крім того, з компанії пішла голова відділу, Джобс прости нас, різноманіття та інклюзивності.
#iOSКомпас **🧭
7️⃣*3️⃣ Завдання 73
Чи можна реалізувати функцію в протоколі?***
З вами знову той самий автор каналу @badlinkschannel. Не забувайте підписатися. А ми продовжуємо наші яблучні історіі.
🤔 Можна реалізувати функцію в протоколі, використовуючи розширення протоколів (protocol extensions). Цей підхід дозволяє додавати конкретну реалізацію методів, властивостей і інших вимог протоколу, що робить протоколи дуже потужним інструментом для створення гнучкого та масштабованого коду.
🔣 Як це працює
Розширення протоколів дозволяють визначати реалізацію методів, властивостей, ініціалізаторів і сабскриптів, які будуть доступні всім типам, що відповідають даному протоколу. Таким чином, будь-який тип даних, що реалізує цей протокол, автоматично отримує цю реалізацію без необхідності її повторного написання.
🤓 Приклад:
```
protocol Printable {
func printYourself()
}
extension Printable {
func printYourself() {
print("I am (self)")
}
}
struct Person: Printable {
var name: String
var age: Int
}
let john = Person(name: "John Doe", age: 30)
john.printYourself() // Виведення: "I am Person(name: "John Doe", age: 30)"
```
У цьому прикладі структура Person
відповідає протоколу Printable
і автоматично отримує реалізацію методу printYourself
через розширення протоколу. Метод виводить текстове представлення екземпляра.
👍 Переваги:*1️⃣ Код стає більш DRY (Don’t Repeat Yourself*): Розширення протоколів дозволяють визначити загальну поведінку в одному місці, уникнувши дублювання коду в усіх типах, що відповідають протоколу.
2️⃣ Підвищення гнучкості: Легко змінювати поведінку всіх типів, що відповідають протоколу, просто змінюючи реалізацію в розширенні протоколу.
3️⃣ Покращення тестованості: Оскільки конкретні реалізації зосереджені в розширеннях протоколів, їх легше тестувати і підтримувати.
😖 Обмеження:
1️⃣ Розширення не можуть додавати збережені властивості до типів.
2️⃣ Розширення не можуть перевизначати існуючі методи, реалізовані типами.
#️⃣ Розширення протоколів роблять Swift більш потужним інструментом для розробки, забезпечуючи гнучкість і повторне використання коду.
#iOSКомпас **🧭
7️⃣*2️⃣ Завдання 72
Яка диспетчеризація використовується для Extensions?***
З вами знову той самий автор каналу @badlinkschannel. Сподіваюсь вам ще не набридла ця ідея капітана галери про iOS розробника.
🤔 Механізм, який використовується для виклику методів, доданих через розширення (extensions), називається статичною диспетчеризацією. Це означає, що виклик методу, визначеного в розширенні, вирішується на етапі компіляції, а не під час виконання програми.
🔣 Статична диспетчеризація
Означає, що компілятор заздалегідь визначає, який метод буде викликано. Це призводить до таких особливостей:
1️⃣ Продуктивність: Оскільки виклик методу вирішується під час компіляції, це може підвищити продуктивність, зменшивши накладні витрати, пов’язані з динамічною диспетчеризацією, як-от пошук у таблиці віртуальних методів.
2️⃣ Передбачуваність: Статична диспетчеризація робить поведінку програми більш передбачуваною, оскільки точно відомо, який метод буде викликано, без впливу можливих змін в ієрархії класів або перевизначень методів.
3️⃣ Обмеження на перевизначення: Методи, додані через розширення, не можуть бути перевизначені нащадками типу, до якого вони додані. Це означає, що якщо ви додаєте метод до протоколу через розширення, і цей метод потім реалізується в класі, який відповідає цьому протоколу, виклик цього методу через екземпляр класу використовуватиме реалізацію з класу, а не з розширення.
🤓 Приклад:
```
protocol MyProtocol {
func defaultMethod()
}
extension MyProtocol {
func defaultMethod() {
print("Called from protocol extension")
}
}
class MyClass: MyProtocol {
func defaultMethod() {
print("Called from class implementation")
}
}
let myInstance: MyProtocol = MyClass()
myInstance.defaultMethod() // Вивід: "Called from class implementation"
```
У цьому прикладі, хоча myInstance
типізований як MyProtocol
, метод defaultMethod
викликається з реалізації в класі MyClass
, а не з розширення протоколу, завдяки статичній диспетчеризації, яка вирішується під час компіляції.
#️⃣ Статична диспетчеризація робить розширення потужним інструментом для додавання функціональності до існуючих типів, але вимагає розуміння її впливу на поведінку програми, особливо стосовно спадкування та перевизначення методів. Це підвищує продуктивність і передбачуваність за рахунок гнучкості, яку може запропонувати динамічна диспетчеризація.is
Простір для вивчення нової професії, зростання в кар’єрі або розвитку бізнесу👇🏻
Наша команда пише для вас найкращі та найцікавіші матеріали, які обов’язково допоможуть у вашому навчанні: https://genius.space/lab/
Last updated 1 month, 2 weeks ago