Меньше печатайте, меньше читайте, больше производите | Обновление от 14 мая 2017 г.

Итак, вы работаете со Swift пару месяцев. Теперь вы хотите стать лучшим разработчиком Swift? СУХОЙ, ПОЦЕЛУЙ, а НЕ ВЛАЖНЫЙ? У меня тут и там есть золотые самородки.

Извините за форматирование, я постарался сделать как можно меньше строк для краткости. Не стесняйтесь копировать и вставлять в Playground, чтобы проверить, все ли работает. 👊 Если нет, прокомментируйте ниже. Я исправлю их как можно скорее.

Я также встроил уроки YouTube под каждую часть для объяснения.

Я слишком много говорил. Приступим.

1. Продление

Пример) Возвести число в квадрат

// Okay Version
func square(x: Int) -> Int { return x * x }
var squaredOFFive = square(x: 5)
square(x:squaredOFFive) // 625

Бесполезная переменная была создана как двойной квадрат 5 - нам не нужно получать удовольствие от набора текста.

// Better Version
extension Int { 
 var squared: Int { return self * self }
}
5.squared // 25
5.squared.squared // 625

Дополнительный урок

2. Дженерики

Пример) Распечатать все элементы в массиве

// Bad Code
var stringArray = ["Bob", "Bobby", "SangJoon"]
var intArray = [1, 3, 4, 5, 6]
var doubleArray = [1.0, 2.0, 3.0]
func printStringArray(a: [String]) { for s in a { print(s) } }
func printIntArray(a: [Int]) { for i in a { print(i) } }
func printDoubleArray(a: [Double]) {for d in a { print(d) } }

Слишком много бесполезных функций. Давайте создадим только один.

// Awesome Code
func printElementFromArray<T>(a: [T]) {
 for element in a { print(element) } }

Общий урок

3. Цикл For против цикла while

Пример. Напечатайте «Счетчик» 5 раз.

// Okay Code
var i = 0
while 5 > i {
print("Count")
i += 1 }

Вы задали переменную "i", чтобы убедиться, что ваш компьютер не ломается, печатая ограниченные числа.

Слушайте, больше переменных → больше запоминания → больше головной боли → больше ошибок → больше жизненных проблем.

Вспомните эффект бабочки.

// Better Code
for _ in 1...5 { print("Count") }

«Великолепно» - Боб

Зацикленный урок

4. Дополнительная распаковка

Пример) Gaurd let vs if let

Давайте сделаем программу для приветствия нового пользователя.

var myUsername: Double?
var myPassword: Double?
// Hideous Code
func userLogIn() {
 if let username = myUsername {
  if let password = myPassword {
   print("Welcome, \(username)"!)
  }
 }
}

Вы видите пирамиду гибели? Это неприятный вложенный код. Никогда. Уничтожьте плохое, принесите хорошее.

// Pretty Code
func userLogIn() {
 guard let username = myUsername, let password = myPassword 
  else { return } 
 print("Welcome, \(username)!") }

Разница огромная. Если имя пользователя или пароль имеют нулевое значение, красивый код преждевременно выйдет из функции, вызвав «return». В противном случае он напечатает приветственное сообщение. Нет пирамиды. 🤘

Контент был перенесен с Medium на личную платформу. Остальную часть содержания шести других советов по Swift вы можете прочитать здесь