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

Когда мы передаем value типы в качестве аргументов в функцию, они статичны – менять их нельзя. Было бы удобно иметь возможность модифицировать данные значения. К счастью, у Swift для этого есть решение: ключевое слово inout, которое используется перед типом параметра в связке с '&' перед аргументом. Это позволит нам модифицировать значение внутри функции.

На самом деле, мы не модифицируем значением напрямую. Такое поведение называется "copy-in copy-out" или же "call by value result" и работает следующим образом:
1. Когда мы вызываем функцию, значение аргумента копируется.
2. Дальше внутри функции копия модифицируется.
3. По возращению функции Swift присваивает модифицированное значение оригинальному аргументу.

Параметры inout встречаются чаще, чем вам может показаться на первый взгляд. Например, оператор += использует inout для изменения строки, когда вы хотите добавить одну строку к другой.

#swift

Подписывайтесь на канал 👉@coddy_academy
👍1
Handlebars выражение {{else}}

Handlebars выражение {{else}} можно вставить в помощник блока {{if}}. Содержимое шаблона внутри секции else вступает в силу, когда предыдущие условия ложные.

#javanoscript

Подписывайтесь на канал 👉@coddy_academy
👍2
Как удалить директорию в java?

Вы можете использовать File.delete() для удаления директории.

import java.io.File;

class Main {
public static void main(String[] args) throws Exception {
File file = new File("delete_folder");

if (file.delete()){
System.out.println("Директория успешно удалена");
}
}
}

#java

Подписывайтесь на канал 👉@coddy_academy
👍1
Как декодировать property list используя Decodable?

Property list, обычно сокращенно plist, представляет собой XML-файл, содержащий данные в формате "ключ-значение". Вы можете использовать его в своих приложениях для iOS в качестве простого хранилища данных. Эта функция-утилита позволит вам задекодить данные в нужный удобный вам тип, используя Decodable.


extension Bundle {
func decodePlist<T: Decodable>(_ filename: String, to entity: T.Type) -> T? {
guard
let path = Bundle.main.path(forResource: filename, ofType: "plist"),
let xml = FileManager.default.contents(atPath: path),
let content = try? PropertyListDecoder().decode(T.self, from: xml)
else { return nil }
return content
}
}

#swift

Подписывайтесь на канал 👉@coddy_academy
👍1
Сортировка словаря по значениям

Распространена практика использования словарей в качестве таблиц для хранения данных. Сортировка данных словаря по значениям ключей, а не самим ключам, нередко ставит в тупик. Задача решается довольно просто при помощи соответствующего аргумента функции сортировки

#python

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

Свойство .count возвращает целое число, представляющее количество пар ключ-значение в словаре.

#swift

Подписывайтесь на канал 👉@coddy_academy
Парсинг JSON файлов в словарь

Формат JSON используется для хранения пар ключ-значение. Python json модуль позволяет считывать такой формат данных и парсить его в словарь. Функция json.load принимает файловый объект в качестве аргумента и возвращает данные в формате словаря.

#python

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

Вы можете использовать условие и цикл для проверки существования элемента в массиве.

class Main {
public static void main(String[] args) throws Exception {
int[] firstArray = new int[]{52, 21, 94, 29, 91};
int[] secondArray = new int[]{82, 74, 51, 39, 23};

int element = 21;

for (int i = 0; i < firstArray.length; i++) {
if (firstArray[i] == element){
System.out.println(element + " in first array");
}
}

for (int i = 0; i < secondArray.length; i++) {
if (secondArray[i] == element){
System.out.println(element + " in second array");
}
}
// Вывод : 21 in first array
}
}

#java

Подписывайтесь на канал 👉@coddy_academy
👍1👎1
Как использовать ключевое слово rethrows?

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

Ключевое слово rethrows используется, когда вы пишете функцию (назовем ее A), которая принимает другую функцию в качестве параметра (назовем ее B). Rethrows делает так, что если функция B выбрасывает ошибки, тогда и A будет выбрасывать ошибки. Если функция B не выбрасывает ошибки, тогда и A этого делать не будет.

Какое преимущество мы получаем? Rethrows позволяет убрать лишние try/catch в случаях, где они не нужны.

Возьмем стандартные 'map', 'filter', 'forEach' для массивов. Когда вы внутри замыкания помечаете что-то как try, Swift просит вас добавить try еще и для вызова "Call can throw but is not marked with 'try'". Если внутри замыкания ничего ошибку выбрасывать не будет, тогда и целый вызов помечать try не нужно.

Данное поведение во всех описанных выше методах реализовано‌‌‎ с помощью rethrows‎.‌‌‎​ 

#swift

Подписывайтесь на канал 👉@coddy_academy
👍2
Justify Self

CSS свойство justify-self используется для того, чтобы определить, как отдельный элемент сетки позиционирует себя вдоль строки или встроенной оси. По умолчанию элементы сетки наследуют значение justify-items свойства контейнера. Если установлено значение justify-self, оно переопределит унаследованное значение justify-items.

#css

Подписывайтесь на канал 👉@coddy_academy
👍1
Как использовать String в качестве ошибок?

Обычно, чтобы сообщать о том, что операция завершилась с ошибкой, в Swift используется протокол Error. Когда мы проектируем чистое API, обычной практикой для выполнения данной цели является создание собственного error enum, в котором прописываются нужные варианты ошибок под конкретный функционал.

Но что делать, если мы хотим получить простое решение для случаев, когда ошибки единичные и смысла создавать отдельный enum нет?

Тогда можно реализовать LocalizedError для String и использовать строку в качестве ошибки. Такой вариант идеально подойдет для возвращение простых, user-facing ошибок.


extension String: LocalizedError {
public var errorDenoscription: String? { self }
}

func loadDataFromServer(result: @escaping (Result<String, Error>) -> Void) {
// ...
result(.failure("Что-то пошло не так"))
}



#css #handyExtensions #error #basic #swift

Подписывайтесь на канал 👉@coddy_academy
Обработка ошибок асинхронной функции

Функции JavaScript async используют try...catch операторы для обработки ошибок. Этот метод позволяет совместно обрабатывать ошибки для синхронного и асинхронного кода.

#javanoscript

Подписывайтесь на канал 👉@coddy_academy
👍2
Запись в файл

По умолчанию файл при открытии с помощью open() предназначен только для чтения. Второй аргумент 'r' передается ему по умолчанию. Чтобы записать в файл, сначала откройте файл с разрешением на запись с помощью аргумента 'w'. Затем используйте метод .write() для записи в файл. Если файл уже существует, все предыдущее содержимое будет перезаписано.

#python

Подписывайтесь на канал 👉@coddy_academy
👍2
Count()

Результат выполненного LINQ запроса демонстрирует метод Count(), который возвращает количество содержащихся в нем элементов.

#c_sharp

Подписывайтесь на канал 👉@coddy_academy
👍1
Как изменить маркеры списка в css?

Изменить маркеры списка в css можно через свойство list-style :

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<style>
ul {
list-style: square;
}
</style>
</head>
<body>
<ul>
<li><span>Собака</span></li>
<li><span>Кошка</span></li>
<li><span>Птица</span></li>
</ul>
</body>
</html>


#css

Подписывайтесь на канал 👉@coddy_academy
👍2
Медиа-запрос

Медиа-запрос CSS используется для адаптации отображения веб-сайта к разным размерам экрана. Медиа-запрос начинается с ключевого слова media, за которым следует одно или несколько условий, проверяющих размер экрана, разрешение и/или другие свойства. Если эти условия соблюдены, все правила CSS в медиа-запросе будут применены к странице.

#css

Подписывайтесь на канал 👉@coddy_academy
👍3
Функция fetch()

Функцию Fetch API fetch() можно использовать для создания запросов. Принимая дополнительные аргументы, запрос можно настроить. Например, изменить тип запроса, заголовки, указать тело запроса и многое другое.

#javanoscript

Подписывайтесь на канал 👉@coddy_academy
Функция dir()

В Python встроенная функция dir() без каких-либо аргументов возвращает список всех атрибутов в текущей области.
Если в качестве аргумента объект, то dir() пытается вернуть все допустимые атрибуты объекта.

#python

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

В запросах LINQ оператор Select определяет, что возвращается для каждого элемента результирующего запроса. Его можно использовать как в методе, так и в синтаксисе запроса.

#c_sharp

Подписывайтесь на канал 👉@coddy_academy
Как перевести double в string в java?

Вы можете использовать Double.toString() для перевода double в String.

class Main {
public static void main(String[] args) throws Exception {
double counter = 5.7;

String counter_string = Double.toString(counter);

System.out.println(counter_string); // Вывод : 5.7
}
}

#java

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

В функции Fetch API fetch() свойство ok ответа проверяет, является ли он истинным или ложным. В примере кода свойство .ok будет иметь значение true, если HTTP-запрос выполнен успешно. Свойство .ok будет иметь значение false, если HTTP-запрос не удался.

#javanoscript

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