По мере необходимости как пишется запятая

По традиции, первая программа на новом языке должна выводить на экран словосочетание hello, world. на swift это пишется всего в

По традиции, первая программа на новом языке должна выводить на экран словосочетание «Hello, world». На Swift это пишется всего в одну строку:

Если вы писали до этого код на C или Objective-C, то этот синтаксис должен быть вам знаком. На Swift, эта строка является законченной программой. Не нужно дополнительно импортировать отдельные библиотеки для таких функций, как ввод/вывод или обработка строк. Код, написанный в глобальной области, используется как входная точка для программы, так что функция main() больше не нужна. Также вам не нужно писать точки с запятой после каждой строки.

Наглядно показывая решение типичных задач, это введение даст вам достаточно информации для того, чтобы начать писать код на языке Swift. Не волнуйтесь если что-то покажется непонятным – все, что показано в этом введении, детально поясняется далее в этой книге.

Простые значения

Используйте let для создания констант и var для объявления переменных. Значение константы не обязательно должно быть известно на момент компиляции, но оно должно присваиваться строго один раз. Это значит, что вы можете использовать константу для обозначения значения, определяемого единожды, но используемого во многих местах.

var myVariable = 42
myVariable = 50
let myConstant = 42

Константа или переменная должны иметь те же типы данных, которые вы хотите им присвоить. Хотя, вы не должны всегда явно объявлять тип. Когда вы присваиваете значение при создании константы или переменной, компилятор логически предугадывает его тип. В примере выше, компилятор предугадал, что значение myVariable integer (целое число), потому что присвоенное ему значение — Integer.

Если присвоенное значение не дает достаточной информации (или когда значение еще не присвоено), укажите тип, написав его после названия, разделенной с помощью двоеточия.

let implicitInteger = 70
let implicitDouble = 70.0
let explicitDouble: Double = 70

Задание

Создайте константу с явным типом Float (число с плавающей точкой) и значением 4.

Значения никогда не должны неявно конвертироваться в другой тип. Если вам нужно конвертировать значение в другой тип, тогда явно создайте экземпляр нужного типа.

let label = "The width is "
let width = 94
let widthLabel = label + String(width)

Задание

Попробуйте удалить конвертирование в String из последней строки. Какую ошибку вы получите?

Есть еще один простой способ поместить значение в строку. Запишите значение в скобках, и поставьте перед скобками обратный слэш ««, как показано ниже.

let apples = 3
let oranges = 5
let appleSummary = "I have (apples) apples."
let fruitSummary = "I have (apples + oranges) pieces of fruit."

Задание

Используйте () для того, чтобы добавить выражение вычисления числа с плавающей точкой в строку, либо для того, чтобы вставить чье-то имя в выражение приветствия.

Используйте три двойные кавычки для строк, которые занимают несколько строк. Отступы каждой отдельной строчки строки должны совпадать с отступом закрывающей тройки двойных кавычек.

let quotation = """
Даже несмотря на то, что есть пробелы слева,
сама строка не имеет отступа.
За исключением этой строки.
Двойные кавычки (") могут быть внутри строки без экранирования.

У меня все еще есть (apples + oranges) фруктов.
"""

Массивы и словари создаются с помощью квадратных скобок ([]), а получить доступ к их значениям можно указав индекс или ключ в квадратных скобках. Ставить запятую после последнего элемента разрешается.

var shoppingList = ["catfish", "water", "tulips"]
shoppingList[1] = "bottle of water"
 
var occupations = [
    "Malcolm": "Captain",
    "Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"

Массив автоматически увеличивается при добавлении элементов.

shoppingList.append("blue paint")
print(shoppingList)

Чтобы создать пустой массив или словарь, используйте выражение инициализации.

let emptyArray = [String]()
let emptyDictionary = [String: Float]()

Если информация о типе переменной или константы должна быть предугадана, то вы можете написать пустой массив через [] и пустой словарь через [:] — например, когда вы присваиваете новое значение переменной или назначаете аргумент функции.

shoppingList = []
occupations = [:]

Управление потоком

Для создания условий используйте if и switch, а для создания циклов используйте for-inwhile, и repeat-while. Скобки вокруг условий или циклов не обязательны. Фигурные скобки вокруг тела условия или цикла — обязательны.

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}
print(teamScore)

В инструкции if, условие должно быть Boolean выражение — это означает, что такой код как if score {…} ошибочный, никакого неявного сравнения с нулем не будет.

Вы можете использовать if и let вместе, чтобы работать со значениями, которые могут отсутствовать. Эти значения представлены как опциональные. Опциональные значения либо содержат значение, либо содержат nil, который обозначает отсутствие значения. Можно писать вопросительный знак (?) после типа значения, чтобы обозначить что оно опциональное.

var optionalString: String? = "Hello"
print(optionalString == nil)
 
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, (name)"
}

Задание

Поменяйте optionalName на nil. Какое приветствие вы получите? Добавьте else условие, которое установит другое приветствие, если optionalName равно nil.

Если опциональное значение nil, то условие считается false и код в фигурных скобках пропускается. Иначе, опциональное значение извлекается и назначается константе написанной после let, что делает извлеченное значение доступным внутри блока кода.

Другой способ обработки опциональных значений — это предоставление дефолтного значения, используя оператор ??. Если опциональное значение отсутствует, то будет использовано дефолтное значение вместо него.

let nickName: String? = nil
let fullName: String = "John Appleseed" 
let informalGreeting = "Hi (nickName ?? fullName)"

Switch поддерживает любые данные и множество операторов сравнения — они не ограничены целыми числами и сравнениями.

let vegetable = "red pepper"
switch vegetable {
case "celery":
    print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
     print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
     print("Is it a spicy (x)?")
default:
     print("Everything tastes good in soup.")
}

Задание

Попробуйте удалить блок default. Какую ошибку вы получите?

Вы обратили внимание, как мы можем использовать let в примере, чтобы создать константу, значение которой соответствует условию?

После исполнения кода внутри switch блока case, который попал под условие, программа выходит из инструкции switch. Исполнение не продолжается к следующему блоку сase — это означает, что не нужно прерывать switch после каждого блока case с помощью оператора break.

Вы можете использовать for-in, чтобы выполнить итерацию по элементам словаря, указывая пару имен для каждой пары ключ-значение. Словари — неупорядоченные коллекции, так что их ключи перебираются в произвольном порядке.

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (_, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}
print(largest)

Задание

Замените _ названием переменной, чтобы иметь возможность отследить какое число самое большое, а также, из какой последовательности будет это число.

Используйте while чтобы повторять код, пока условие не поменяется. Условие цикла может также быть в конце, если нужно чтобы цикл выполнился хотя-бы один раз.

var n = 2
while n < 100 {
    n *= 2
}
print(n)
 
var m = 2
repeat {
    m *= 2
} while m < 100
print(m)

Вы можете ставить индекс, используя оператор ..< чтобы создать диапазон индексов:

var firstForLoop = 0
for i in 0..<4 {
    firstForLoop += i
}
print(firstForLoop)

Используйте ..< чтобы создать диапазон который будет пропускать последнее значение, либо используйте – диапазон который включает оба значения, и начальное и конечное.

Функции и замыкания

Чтобы объявить функцию используйте оператор func. Чтобы вызвать функцию просто напишите ее имя со списком аргументов в скобках. Используйте –> чтобы отделить имена и типы аргументов от возвращаемого типа функции.

func greet(name: String, day: String) -> String {
    return "Hello (name), today is (day)."
}
greet(name: "Bob", day: "Tuesday")

Задание

Удалите аргумент day. Добавьте аргумент, чтобы вставить сегодняшнее блюдо дня в приветствие.

По умолчанию функции используют имена параметров как ярлыки для их аргументов. Напишите свой собственный ярлык до имени параметра функции, или напишите знак подчеркивания (_) для того, чтобы пропустить ярлык.

func greet(_ name: String, on day: String) -> String {
    return "Hello (name), today is (day)."
}
greet("John", on: "Wednesday")

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

func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
    var min = scores[0]
    var max = scores[0]
    var sum = 0
    
    for score in scores {
        if score > max {
            max = score
        } else if score < min {
            min = score
        }
        sum += score
    }
    
    return (min, max, sum)
}
let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9])
print(statistics.sum)
print(statistics.2)

Функции могут быть вложенными. Вложенные функции имеют доступ к переменным, которые были объявлены во внешней функции. Вы можете использовать вложенные функции, чтобы упорядочивать код в длинных или сложных функциях.

func returnFifteen() -> Int {
    var y = 10
    func add() {
        y += 5
    }
    add()
    return y
}
returnFifteen()

Функции — это объект первого класса. Это означает, что результатом функции может быть другая функция.

func makeIncrementer() -> ((Int) -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}
var increment = makeIncrementer()
increment(7)

Функция может принимать другую функцию в качестве аргумента.

func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
    for item in list {
        if condition(item) {
            return true
        }
    }
    return false
}
func lessThanTen(number: Int) -> Bool {
    return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(list: numbers, condition: lessThanTen)

Функции на самом деле — частный случай замыканий. Замыкания представляют из себя блок кода, который может быть вызван позже. Код внутри замыканий имеет доступ к таким объектам, как переменные и функции, которые были созданы в тех же рамках, что и сами замыкания. Даже если замыкание находятся и запускается в другом блоке , вы уже видели этот пример во вложенных функциях. Вы можете написать замыкание без имени, просто обозначив код фигурными скобками и круглыми скобками ({}). Внутри скобок используйте in для разграничения аргументов и возвращаемого типа от тела замыкания.

numbers.map({ (number: Int) -> Int in
    let result = 3 * number
    return result
})

Задание

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

У вас есть несколько способов для того, чтобы написать замыкание более кратко. Когда тип замыкания точно известен, например — обратный вызов делегата (callback), вы можете пропустить тип его аргументов, тип возвращаемого значения, либо и то и другое. Одиночный оператор замыкания неявно возвращает значение своего единственного выражения.

let mappedNumbers = numbers.map({ number in 3 * number })
print(mappedNumbers)

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

let sortedNumbers = numbers.sorted { $0 > $1 }
print(sortedNumbers)

Объекты и классы

Чтобы создать класс используйте оператор class и дальше имя класса. Объявление свойств класса пишется таким же способом, как и объявление константы или переменной, за исключением того, что они объявляются в пределах класса. Подобно этому, методы класса объявляются тем же способом что и функции.

class Shape {
    var numberOfSides = 0
    func simpleDescription() -> String {
        return "A shape with (numberOfSides) sides."
    }
}

Задание

Добавьте константное свойство класса, используя let. Также, добавьте другой метод, который принимает какой-нибудь параметр.

Экземпляры класса создаются с помощью добавления скобок после имени класса. Получить доступ к свойствам и методам класса можно через точку.

var shape = Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription()

В этой версии класса Shape отсутствует кое-что важное, а именно инициализатор. Он нужен для того, чтобы подготовить класс, когда создается экземпляр класса. Для его создания используйте оператор init.

class NamedShape {
    var numberOfSides: Int = 0
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func simpleDescription() -> String {
        return "A shape with (numberOfSides) sides."
    }
}

Обратите внимание, как self используется, чтобы различать name — как свойство класса, и name — как аргумент инициализатора. Аргументы инициализатору передаются как вызов функции при создании экземпляра класса. Каждому свойству должно присваиваться значение: либо через объявление (как с numberOfSides), либо через инициализатор (как с name).

Используйте deinit для создания деинициализатора, если вам нужно выполнить некоторую очистку, прежде чем объект будет освобожден.

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

Методы подкласса, которые переопределяют методы родителя, отмечаются с помощью оператора override. При попытке переопределения без override компилятор выдаст ошибку. Компилятор также обнаруживает методы с override, которые на самом деле не переопределяют никакие методы супер класса.

class Square: NamedShape {
    var sideLength: Double
    
    init(sideLength: Double, name: String) {
        self.sideLength = sideLength
        super.init(name: name)
        numberOfSides = 4
    }
    
    func area() -> Double {
        return sideLength * sideLength
    }
    
    override func simpleDescription() -> String {
        return "A square with sides of length (sideLength)."
    }
}
let test = Square(sideLength: 5.2, name: "my test square")
test.area()
test.simpleDescription()

Задание

Создайте другой подкласс Circle класса NamedShape, который принимает радиус и имя в качестве аргументов в их инициализатор. Реализуйте метод area() и метод simpleDescription() класса Circle.

В дополнение к простым хранящимся свойствам, свойства могут иметь также getter и setter.

class EquilateralTriangle: NamedShape {
    var sideLength: Double = 0.0
    
    init(sideLength: Double, name: String) {
        self.sideLength = sideLength
        super.init(name: name)
        numberOfSides = 3
    }
    
    var perimeter: Double {
        get {
            return 3.0 * sideLength
        }
        set {
            sideLength = newValue / 3.0
        }
    }
    
    override func simpleDescription() -> String {
        return "An equilateral triangle with sides of length (sideLength)."
    }
}
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
print(triangle.perimeter)
triangle.perimeter = 9.9
print(triangle.sideLength)

В setter для свойства perimeter, новое значение имеет неявное имя newValue. Вы можете явно назначить другое имя, указав его в скобках после set.

Обратите внимание, что инициализатор для EqualiateralTriangle имеет три разных шага:

  1. Устанавливает значение свойств объявляемых подклассом.
  2. Вызывает инициализатор родителя.
  3. Изменяет значение свойств, объявленных родителем. Любые дополнительные работы по начальной установке, которые используют методы, getter’ы или setter’ы могут быть включены в этом месте.

Если вам не нужно вычислять свойство, но по прежнему нужно предоставить код, который будет запущен до и после установки нового значения — используйте willSet и didSet. Например, класс ниже проверяет что длина стороны треугольника всегда такая же, как длина стороны его квадрата:

class TriangleAndSquare {
    var triangle: EquilateralTriangle {
        willSet {
            square.sideLength = newValue.sideLength
        }
    }
    var square: Square {
        willSet {
            triangle.sideLength = newValue.sideLength
        }
    }
    init(size: Double, name: String) {
        square = Square(sideLength: size, name: name)
        triangle = EquilateralTriangle(sideLength: size, name: name)
    }
}
var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")
print(triangleAndSquare.square.sideLength)
print(triangleAndSquare.triangle.sideLength)
triangleAndSquare.square = Square(sideLength: 50, name: "larger square")
print(triangleAndSquare.triangle.sideLength)

Когда вы работаете с опциональными значениями, вы можете написать ? перед такими операциями как: методы, свойства или индексаторы. Если значение перед ?nil, то все что после ? игнорируется и значение всего выражения становится nil. В противном случае, опциональное значение извлекается, и все что после ? выполняется. В обоих случаях значение всего выражения является опциональным значением.

let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
let sideLength = optionalSquare?.sideLength

Перечисления и структуры

Используйте слово enum для создания перечислений. Подобно классам и другим именованным типам, перечисления могут иметь методы связанные с ним.

enum Rank: Int {
    case ace = 1
    case two, three, four, five, six, seven, eight, nine, ten
    case jack, queen, king
    func simpleDescription() -> String {
        switch self {
        case .ace:
            return "ace"
        case .jack:
            return "jack"
        case .queen:
            return "queen"
        case .king:
            return "king"
        default:
            return String(self.rawValue)
        }
    }
}
let ace = Rank.ace
let aceRawValue = ace.rawValue

Задание

Напишите функцию, сравнивающую два Rank значения, с помощью сравнения их исходных (raw) значений.

По умолчанию Swift присваивает исходные значения, начиная с нуля и увеличивая их на единицу каждый раз, но вы можете изменить это поведение, явно указав значения. В приведенном выше примере, Ace явно присвоено исходное значение 1, остальные исходные значения присваиваются по порядку. Вы также можете использовать строки или числа с плавающей точкой в качестве типа исходного значения перечисления. Используйте свойство rawValue для доступа к исходному значению элемента перечисления.

Используйте инициализатор init?(rawValue:) для того, чтобы создать экземпляр перечисления из исходного значения:

if let convertedRank = Rank(rawValue: 3) {
    let threeDescription = convertedRank.simpleDescription()
}

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

enum Suit {
    case spades, hearts, diamonds, clubs
    func simpleDescription() -> String {
        switch self {
        case .spades:
            return "spades"
        case .hearts:
            return "hearts"
        case .diamonds:
            return "diamonds"
        case .clubs:
            return "clubs"
        }
    }
}
let hearts = Suit.hearts
let heartsDescription = hearts.simpleDescription()

Задание

Добавьте метод color() для Suit, который возвращает «black» для spades (пики) и clubs (трефы), и возвращает «red» для hearts (червы) и diamonds (бубны).

Обратите внимание на два способа обращения к элементам перечисления hearts выше. Во время присвоения значения константе hearts, обращение к элементу перечисления Suit.hearts происходит через его полное имя, потому что константа не имеет явно указанного типа. Внутри switch, обращение к перечислению происходит через сокращённую форму .hearts, потому что значение self уже известно, и оно Suit. Вы можете использовать сокращенную форму каждый раз, когда тип значения известен.

Если перечисление имеет raw значения, то эти значения определены в качестве части определения перечисления, что значит, что у каждого конкретного экземпляра кейса всегда будет одно и то же raw значение. Другой вариант использования кейсов — создание значений ассоциированных с кейсом. Эти значения определяются, когда вы создаете экземпляр, и эти значения могут быть разными для различных экземпляров кейсов перечисления. Вы можете считать, что ассоциативные значения ведут себя как свойства хранения экземпляра кейса перечисления. Например, представим, что у нас есть кейс, который занимается получением данных времени восхода солнца и заката солнца с сервера. Сервер либо предоставит нам затребованную информацию, либо, в случае ошибки, даст нам описание, что пошло не так.

enum ServerResponse {
    case result(String, String)
    case failure(String)
}
 
let success = ServerResponse.result("6:00 am", "8:09 pm")
let failure = ServerResponse.failure("Out of cheese.")
 
switch success {
case let .result(sunrise, sunset):
    print("Sunrise is at (sunrise) and sunset is at (sunset).")
case let .failure(message):
    print("Failure...  (message)")
}

Задание

Добавьте третий кейс к ServerResponse и к инструкции switch.

Обратите внимание, как время восхода и время заката получаются из значения от ServerResponse в виде совпадающего случая в кейсе инструкции switch.

Используйте оператор struct для создания структур. Структуры поддерживают многие характерные черты классов, в том числе методы и инициализаторы. Одно из наиболее важных различий между классами и структурами в том, что структуры всегда копируются когда они передаются в коде, а классы, передаются по ссылке.

struct Card {
    var rank: Rank
    var suit: Suit
    func simpleDescription() -> String {
        return "The (rank.simpleDescription()) of (suit.simpleDescription())"
    }
}
let threeOfSpades = Card(rank: .three, suit: .spades)
let threeOfSpadesDescription = threeOfSpades.simpleDescription()

Задание

Добавьте метод для Card, который бы создал полную колоду карт, с одной картой из каждой комбинации ранга (rank) и масти (suit).

Протоколы и расширения

Используйте оператор protocol для объявления протокола.

protocol ExampleProtocol {
 var simpleDescription: String { get }
 mutating func adjust()
}

Классы, перечисления, и структуры могут соответствовать протоколам.

class SimpleClass: ExampleProtocol {
    var simpleDescription: String = "A very simple class."
    var anotherProperty: Int = 69105
    func adjust() {
        simpleDescription += "  Now 100% adjusted."
    }
}
var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescription
 
struct SimpleStructure: ExampleProtocol {
    var simpleDescription: String = "A simple structure"
    mutating func adjust() {
        simpleDescription += " (adjusted)"
    }
}
var b = SimpleStructure()
b.adjust()
let bDescription = b.simpleDescription

Задание

Добавьте дополнительное требование в протокол ExampleProtocol. Какие изменения Вам нужно внести в SimpleClass и SimpleStructure, чтобы они соответствовали требованиям этого протокола?

Обратите внимание на использование ключевого слова mutating в объявлении SimpleStructure, оно обозначает метод который модифицирует структуру. Объявление SimpleClass не нуждается в mutating методах, так как методы класса всегда могут модифицировать класс.

Используйте оператор extension (расширение) для того чтобы добавить новый функционал для существующего типа, такой как объявление новых методов и вычисляемых свойств. Вы можете использовать расширение для добавления совместимости с протоколом типу, который объявлен в другом месте, или даже типу, который вы импортировали из библиотеки или фреймворка:

extension Int: ExampleProtocol {
    var simpleDescription: String {
        return "The number (self)"
    }
    mutating func adjust() {
        self += 42
    }
}
print(7.simpleDescription)

Задание

Напишите расширение для типа Double, которое добавляет свойство absoluteValue.

Вы можете использовать имя протокола точно так же как другие именованные типы, например, чтобы создать коллекцию объектов, которые имеют разные типы, но все соответствуют одному протоколу. Когда вы работаете со значениями, чей тип — протокол, методы за пределами объявления протокола не доступны.

let protocolValue: ExampleProtocol = a
print(protocolValue.simpleDescription)
// print(protocolValue.anotherProperty) // Раcкомментируйте, чтобы увидеть ошибку

Несмотря на то, что переменная protocolValue имеет исполняемый тип SimpleClass, компилятор обрабатывает его тип как присвоенный ему ExampleProtocol. Это означает, что вы не сможете случайно получить доступ к методам или свойствам, которые класс реализует в дополнение для соответствия протоколу.

Обработка ошибок

Вы отображаете ошибки, используя любой тип, который соответствует протоколу Error.

enum PrinterError: Error {
    case outOfPaper
    case noToner
    case onFire
}

Используйте ключевое слово throw для генерации ошибки и throws для обозначения функции, которая может сгенерировать ошибку. Если вы генерируете ошибку в функции, то функция немедленно возвращается, а код, который вызвал функцию, обрабатывает эту ошибку.

func send(job: Int, toPrinter printerName: String) throws -> String {
    if printerName == "Never Has Toner" {
        throw PrinterError.noToner
    }
    return "Job sent"
}

Есть несколько способов обработки ошибок. Один из вариантов использование do-catch блока. Внутри блока do, вы маркируете код, который может сгенерировать ошибку при помощи ключевого слова try перед ним. Внутри же блока catch автоматически присваивается имя error, но вы можете изменить его, указать свое собственное.

do {
    let printerResponse = try send(job: 1040, toPrinter: "Bi Sheng")
    print(printerResponse)
} catch {
    print(error)
}

Задание

Поменяйте имя принтера на «Never Has Toner», так чтобы функция send(job:toPrinter:) сгенерировала ошибку.

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

do {
    let printerResponse = try send(job: 1440, toPrinter: "Gutenberg")
    print(printerResponse)
} catch PrinterError.onFire {
    print("I'll just put this over here, with the rest of the fire.")
} catch let printerError as PrinterError {
    print("Printer error: (printerError).")
} catch {
    print(error)
}

Задание

Добавьте код внутри блока do. Какого типа ошибка должна быть сгенерирована, чтобы она была обработана в первом catch блоке? А во втором? А в третьем?

Другим способом обработки ошибок является ключевое слово try?, которое позволяет изменить результат в опциональный тип. Если функция генерирует ошибку, то генерируется конкретная ошибка и результат становится равным nil. В противном случае, результат, содержащий опциональное значение возвращается функцией.

let printerSuccess = try? send(job: 1884, toPrinter: "Mergenthaler")
let printerFailure = try? send(job: 1885, toPrinter: "Never Has Toner")

Используйте ключевое слово defer для определения блока кода, который должен быть выполнен в последнюю очередь, непосредственно перед выходом из самой функции. Код в блоке defer исполняется независимо от того, генерируется ли ошибка в функции или нет. Вы можете использовать defer для настройки или очистки кода рядом друг с другом, несмотря на то, что они могут быть исполнены в различное время.

var fridgeIsOpen = false
let fridgeContent = ["milk", "eggs", "leftovers"]
 
func fridgeContains(_ food: String) -> Bool {
    fridgeIsOpen = true
    defer {
        fridgeIsOpen = false
    }
    
    let result = fridgeContent.contains(food)
    return result
}
fridgeContains("banana")
print(fridgeIsOpen)

Универсальные типы

Напишите имя внутри угловых скобок, чтобы создать универсальную (generic) функцию или тип.

func makeArray(repeating item: Item, numberOfTimes: Int) -> [Item] {
    var result = [Item]()
    for _ in 0..

Вы можете создать общие формы функций и методов, так же как и классов, перечислений и структур.

// Reimplement the Swift standard library's optional type
enum OptionalValue {
    case none
    case some(Wrapped)
}
var possibleInteger: OptionalValue = .none
possibleInteger = .some(100)

Используйте where после названия типа, чтобы указать список требований, например — потребовать, чтобы тип реализовал протокол, потребовать, чтобы два типа были одинаковы, или потребовать, чтобы класс имел определенный суперкласс.

func anyCommonElements(_ lhs: T, _ rhs: U) -> Bool
    where T.Element: Equatable, T.Element == U.Element {
        for lhsItem in lhs {
            for rhsItem in rhs {
                if lhsItem == rhsItem {
                    return true
                }
            }
        }
        return false
}
anyCommonElements([1, 2, 3], [3])

Задание

Модифицируйте функцию anyCommonElements, чтобы сделать функцию, которая возвращает массив элементов, общих для обеих последовательностей.

Запись <T: Equatable> -это то же самое, что и <T> … where T: Equatable.

21 июля 2021

2173 просмотра

По мере необходимости как пишется запятая
Ольга Чумичёва
Книжный коуч, книжный пиарщик и маркетолог. 15 лет опыта работы в книгоиздании. На данный момент PR-директор и руководитель пресс-службы Московской международной книжной ярмарки. Организатор шести сезонов литературной премии «Национальный бестселлер». Работала заместителем директора по маркетингу издательского холдинга Азбука-Аттикус, PR-директором издательств «Азбука», «Амфора», «Лимбус Пресс».
  • facebook.com/pishem.knigu.vmeste
  • instagram.com/pishem_knigu_vmeste/
  • Чтобы написать хороший текст, необходима тренировка. Сегодня будем практиковаться прокачивать писательскую мышцу.

    Я дам набор правил и принципов, которым стоит следовать каждый раз, когда вы пишете текст, будь то книга, записка боссу, деловое предложение потенциальным инвесторам, запрос на грант и даже личное письмо.

    fa4444520b0996c1a1f32671487be174

    a701e1b2ebe9ca47f53916d9dbb70100

    1.      Развивайте свой собственный тон или голос

    Ваш письменный голос состоит из выбора слов; способа, которым вы соединяете свои слова; особого взгляда на мир и собственного мнения. Тон и цель книги во многом связаны: ваш тон будет определяться причиной, по которой вы пишете.

    2.      Пишите авторитетно

    Никто не будет относиться к вам серьезно, если вы сами не относитесь к себе серьезно. Перестаньте сомневаться в себе и подвергать сомнению собственный авторитет. Лучший способ сделать это — удалить из текста фразы, которые ослабляют ваш авторитет. Например, такие:

    • «Я думаю»
    • «Может быть»
    • «Полагаю»
    • «По моему мнению»

    Пишите авторитетно, и вас будут считать авторитетом.

    3.      По-настоящему хорошо разбирайтесь в предмете

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

    4.      Знайте, почему вы пишете

    Каждый раз, садясь писать, вспоминайте и формулируйте свою цель. Можете записать ее в начале текста, над которым вы работаете в данный момент.

    • Чего вы надеетесь достичь с помощью книги?
    • Убедить своих читателей действовать определенным образом?
    • Научить, то есть привить некий навык?
    • Развлечь ваших читателей?
    • Проинформировать или объяснить идею?

    Затем напишите формулировку, чтобы вы смогли достичь своей цели.

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

    Каждая успешная книга в стиле нон-фикшн должна оставлять в голове у читателя одну провокационную мысль, которой у него не было раньше. Не две мысли или пять, а только одну.

    6.      Пишите из подсознания

    Айн Рэнд рекомендует писать прямо из подсознания, когда слова как будто бы приходят к вам сами собой. План, который вы подготовили перед тем, как начать писать, будет направлять ваше подсознание. Следовательно, при письме нет необходимости чрезмерно напрягать свой разум: просто позвольте словам течь потоком. Позже, когда будет готов первый черновик, вы сможете использовать свой ум для редактирования написанного.

    7.      Сохраняйте стилевое и лексическое единообразие

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

    8.      Удалите ненужные определения

    Например, вместо «бесплатный подарок» напишите «подарок». Кроме того, избегайте следующих уточнителей и усилителей: уникальный, довольно, скорее, красивый, действительно, очень, вроде, на самом деле, в основном, практически.

    «Каждый раз, когда вы хотите написать «очень», заменяйте его на «чертовски»; ваш редактор удалит это слово, и текст станет таким, каким должен быть».
    Марк Твен

    9.      Остерегайтесь наречий

    Стивен Кинг в своей книге «Как писать книги» говорит: «Дорога в ад вымощена наречиями». В лучшем случае наречия оживляют глаголы или прилагательные.  В худшем случае они выражают значение, уже содержащееся в глаголе. Использовать наречия стоит, лишь если они меняют значение глагола:

    Она счастливо улыбнулась.  «Улыбнулся» содержит значение «счастливо», так что это плохое употребление наречия.
    Она грустно улыбнулась.  В этом случае «грустно» меняет значение глагола.  Это хорошее использование наречия.

    10.   Будьте лаконичны

    Рекомендуется варьировать длину предложений, но старайтесь делать ваши предложения не длиннее 20 слов. Если можно вырезать слово без ущерба смыслу, сделайте это.

    11.   Не используйте сложные слова

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

    12.   Будьте собой

    Читатели хотят, чтобы человек, который с ними разговаривает, звучал искренне. Поэтому основное правило — быть собой.

    13.   Пишите классные абзацы

    Абзацы — главная структурная единица текста.  Вот несколько правил при написании абзацев:

    • Сосредоточьтесь на одной идее в абзаце.
    • Идея должна быть выражена в одном предложении.
    • Вспомогательные предложения абзаца содержат подробности, примеры и инструкции.

    14.   Сделайте свой текст плавным

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

    15.  Используйте активные глаголы

    Обращайте внимание на глаголы, которые вы используете. Заменяйте слабые глаголы более энергичными, короткими и однозначными.

    16.   Будьте осторожны с пассивным залогом

    Пассивный залог заставляет читателя искать скрытый смысл.  В активном предложении субъект четко выполняет действие.  Замените пассивные предложения активными и посмотрите, как реальность становится ярче.

    Пассивный залог: Летом многие свежие овощи продаются на фермерском рынке под открытым небом.
    Активный залог: Летом фермерский рынок под открытым небом предлагает много свежих овощей.

    17.   Самое главное — в начале предложения

    Начинайте предложения с подлежащих и глаголов, выражающих смысл и позволяйте более слабым элементам разветвляться ближе к концу:

    «Повстанцы захватили контроль над Кап-Аитьен, вторым по величине городом Гаити, не встречая большого сопротивления, поскольку сотни жителей приветствовали их, сожгли полицейский участок, разграбили продукты со складов порта и уничтожили аэропорт, в котором находилось несколько самолетов».

    Предложение состоит из 36 слов, но смысл заключен в первых трех: повстанцы захватили власть.

    18.   Избегайте предложений с переносом

    Предложение с переносом объединяет по крайней мере два независимых предложения — группы слов, которые содержат подлежащее и глагол и сами по себе может быть предложением — без союза или адекватной пунктуации.

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

    19.   Избегайте избыточности

    Писатели часто становятся слишком красноречивыми, чтобы выразить свое мнение. Однако вы должны использовать только те слова, которые необходимы для передачи смысла.

    • Абсолютно необходимо подчеркнуть
    • Другой альтернативы нет.
    • Мы поднялись вверх по лестнице

    Избыточность, дублирование смысла в рамках одной фразы называется плеоназмом. Постарайтесь не попадаться в его ловушку.

    20.   Следуйте советам Джорджа Оруэлла.

    При письме задайте себе шесть вопросов Джорджа Оруэлла:

    • Что я пытаюсь сказать?
    • Какие слова это выразят?
    • Какой образ или идиома сделает его более понятным?
    • Достаточно ли яркое сравнение, чтобы произвести эффект?
    • Можно ли сделать текст короче?
    • Сказал ли я что-нибудь некрасивое, чего можно избежать?

    Продолжайте писать текст вашей книги, и держите в уме эти рекомендации. Помните про дисциплину и регулярную работу понемногу. Не поддавайтесь страху и самосаботажу, и если вы писали понемногу каждый день марафона, то к концу месяца у вас будет написана, как минимум, первая глава вашей книги.

    Саморазвитие #ошибки #Писательство 

    Всего найдено: 35

    Добрый день. Подскажите, как писать слова с приставкой «комбо»? Или это не приставка, и сама не понимаю…Например, комбо набор, комбо подписка, комбо услуга

    Ответ справочной службы русского языка

    Часть сложных слов комбо-, как и слова с этой частью, словарями пока не отмечается. Но в них можно найти элемент комби-. Список слов с частью комби- можно получить с помощью академического орфографического ресурса «Академос». Для этого нужно в поисковой строке набрать комби*

    Как писать слова с комбо-, если есть в этом необходимость? Пока отсутствует словарная фиксация, лучше придерживаться правила и писать слитно, как и комби-. Так как слова с комбо— новые в нашем языке, их часто пишут с дефисом, для облегчения восприятия. Но по мере освоения написание подобных слов часто меняется на слитное.

    Доброго времени суток! Подскажите, пожалуйста, требуются ли в этом предложении запятые? По мере вращения планеты вокруг звезды газ и пыль формируют спиральные борозды под воздействием этого движения.

    Ответ справочной службы русского языка

    Запятую можно поставить для отделения оборота с предлогом по мере. Это предупредит неправильное установление границ оборота: По мере вращения планеты, вокруг звезды газ и пыль формируют спиральные борозды под воздействием этого движения или По мере вращения планеты вокруг звезды, газ и пыль формируют спиральные борозды под воздействием этого движения.

    Но полагаем, что лучше было бы изменить порядок компонентов: По мере вращения планеты вокруг звезды и под воздействием этого движения газ и пыль формируют спиральные борозды.

    «Мы гоняли их(,) как могли, когда вас увидели». Запятая перед «как» нужна?

    Ответ справочной службы русского языка

    В значении ‘по мере сил’ слова как мог, как могли и т. д. не обособляются. Верно: Мы гоняли их как могли, когда вас увидели.

    Добрый день! Подскажите, допустима ли запятая По мере накопления опыта(,) статус меняется

    Ответ справочной службы русского языка

    Запятая не требуется.

    Здравствуйте, правильно ли расставлены запятые? Заранее благодарю. К сожалению, в виду сложной финансовой ситуации, слабым поступлением денежных средств, удовлетворить просьбу, изложенную в обращении, не представляется возможным. По мере возможности мы свяжемся с Вами и вернемся к рассмотрению заявления.

    Ответ справочной службы русского языка

    Знаки препинания расставлены верно.

    По мере выполнения заданий вы получаете опыт. После «выполнения» нужна запятая?

    Ответ справочной службы русского языка

    Запятые в этом предложении не нужны.

    Уважаемая редакция, подскажите, пожалуйста, нужна ли запятая в выражении Живем как можем. И под какой случай подходит этот пример?

    Ответ справочной службы русского языка

    В значении ‘по мере сил’ слова как мог, как могли и т. д. не обособляются. Верно: Живем как можем.

    Доброго Вам дня, уважаемая ГРАМОТА! Помогите , пожалуйста , с расстановкой запятых. Верно ли расставлены запятые в последнем предложении. В настоящее время в Обществе проводится ежегодная аудиторская проверка, проводится большая работа по обоснованию регулируемых тарифов на 2019 год. В связи с этим, указанная в вашем запросе информация , будет предоставлена по мере готовности.

    Ответ справочной службы русского языка

    В последнем предложении запятые не нужны: В связи с этим указанная в вашем запросе информация будет предоставлена по мере готовности.

    Добрый день, подскажите, пожалуйста, нужна ли запятая в предложении: Принимать до 4-х таблеток в день по мере необходимости.

    Ответ справочной службы русского языка

    Запятая не ставится. Верно: до четырех таблеток, до 4 таблеток.

    Здравствуйте. Скажите, пожалуйста, нужны ли запятые в предложении «Он(,) как мог(,) помогал отцу»?

    Ответ справочной службы русского языка

    В значении ‘по мере сил’ слова как мог не обособляются: Он как мог помогал отцу.

    Здравствуйте, Справочное бюро. У меня вопрос относительно написания по-русски фамилии «Huntington». Есть неврологическое заболевание под названием «Huntington’s chorea». Изучив по мере своих возможностей литературу, я выяснил, что до 1928 г. во всех русскоязычных источниках это заболевание указывалось как «хорея Huntington’а», т.е. эпоним просто не переводился. В терапевтическом справочнике 1928 г. и в учебнике по неврологии 1930 г. оно было переведено как «хорея Гентингтона». Далее в 1960-х и 1970-80-х гг. чаще всего употреблялось написания «Гентингтона», но «Хантингтона» тоже встречалось. В настоящее время эти два варианта перевода продолжают встречаться. На мой взгляд, целесообразно стремиться к единообразию терминологии, что облегчит поиск необходимой информации. Является ли оправданным, что предпочтение следует отдать такому написанию эпонима, как «хорея Гентингтона», а не «Хантингтона»? Спасибо!

    Ответ справочной службы русского языка

    Фиксируются оба варианта. О предпочтениях должно договориться медицинское сообщество.

    Мы старались(,) как могли. Нужна ли запятая и почему?

    Ответ справочной службы русского языка

    В значении ‘по мере сил’ слова как мог, как могли и т. д. не обособляются: мы старались как могли.

    Молились(?) как могли. Нужна ли здесь запятая?И какое это правило?

    Ответ справочной службы русского языка

    В значении ‘по мере сил’ слова как мог, как могли и т. д. не обособляются: молились как могли.

    Здравствуйте. Помогите, пожалуйста, расставить знаки препинания. Нужно еще где-то добавить? В соответствии с законодательством все предприятия, организации, учреждения, не зависимо от форм собственности, а также физические лица-предприниматели содействуют проведению государственной политики занятости граждан и в обязательном порядке участвуют в обеспечении занятости населения, предусмотренном Постановлением Правительства Удмуртской Республики от 13 октября 2014года №385 «Об утверждении Положения о предоставлении работодателями информации о наличии свободных рабочих мест и вакантных должностей в органы службы занятости» и статьей 25 Закона РФ от 19.04.1991г. № 1032-1 «О занятости населения в РФ». На основании указанных документов работодатели по месту нахождения должны подавать в органы службы занятости населения УР информацию о наличии свободных мест и вакантных должностей по мере необходимости, но не реже одного раза в месяц не позднее 28-го числа текущего месяца. Наряду с этим, в соответствии со статьей 26 закона « О занятости населения», работодатель имеет право принимать на работу граждан, непосредственно обратившихся к нему, на равных основаниях с гражданами, имеющими направление органов службы занятости.

    Ответ справочной службы русского языка

    1. В соответствии с законодательством все предприятия, организации, учреждения, независимо от форм собственности, а также физические лица – предприниматели содействуют проведению государственной политики занятости граждан и в обязательном порядке участвуют в обеспечении занятости населения, предусмотренном Постановлением Правительства Удмуртской Республики от 13 октября 2014 г. № 385 «Об утверждении Положения о предоставлении работодателями информации о наличии свободных рабочих мест и вакантных должностей в органы службы занятости» и статьей 25 Закона РФ от 19 апреля 1991 г. № 1032-1 «О занятости населения в РФ».

    2. На основании указанных документов работодатели по месту нахождения должны подавать в органы службы занятости населения УР информацию о наличии свободных мест и вакантных должностей по мере необходимости, но не реже одного раза в месяц не позднее 28-го числа текущего месяца.

    3. Наряду с этим, в соответствии со статьей 26 закона «О занятости населения», работодатель имеет право принимать на работу граждан, непосредственно обратившихся к нему, на равных основаниях с гражданами, имеющими направление органов службы занятости.

    общие замечания к сайту:
    1. не работают ссылки в ответах на вопросы вида http://spravka.gramota.ru/blang.html?id=243, необходимо обновить ссылки.
    2. в ответах на вопросы нет указания на ошибки, допущенные автором в самом тексте вопроса, что вводит в заблуждение. Более того, иногда в тексте ответа на один вопрос автором ответа допускаются ошибки, противоречащие ответам на другие вопросы, а ведь ожидается, что на этом сайте должны быть только грамотные тексты!

    3. собственно, вопрос: как правильно сокращенно написать порядковое числительное в случае «инженер второй категории»: 2-ой или 2-й ?
    мне кажется ответ на вопрос №229976 здесь не вполне применим.

    Ответ справочной службы русского языка

    1. Это старые ответы Справочного бюро, по мере возможности ссылки обновляем. Присылайте номера вопросов с неработающими ссылками.

    2. У нас нет возможности редактировать тексты вопросов пользователей.

    3. Верно: 2-й.

    Сегодня мы рассмотрим некоторые правила русского языка, касающихся правильной расстановке запятых в предложении. Пусть страница данного сайта станет своеобразной памяткой по пунктуации. Ведь люди часто задают вопросы:

    • «Нужна ли запятая перед… либо…» – перед каким-нибудь словом, либо после него.
    • «Как правильно писать: с запятой или без?».
    • «Нужно ли написать с запятой?».

    Некоторые общие правила

    «Кроме того» — выделяется запятыми всегда (и в начале, и в середине предложения).

    «Скорее всего»:

    • В значении «очень вероятно, вероятнее всего» — выделяется запятыми (пример: «Разумеется, все из-за коньяка и парилки, иначе он бы, скорее всего, промолчал»).
    • В значении «быстрее всего» — нет (образец: «Этим путем скорее всего можно было прийти к дому»).

    «Скорее»:

    • Если в значении «лучше, охотнее», то без запятых. Например: «Она скорее согласилась бы умереть, чем предать его».
    • Тоже без запятых, если в значении «лучше сказать». Например: «произнося какое-нибудь замечание или скорее восклицание».
    • НО! Запятая нужна, если это вводное слово, выражающее оценку автором степени достоверности данного высказывания по отношению к предыдущему (в значении «скорее говоря» или «вероятнее всего»). Например: «Его нельзя назвать умным человеком — скорее, он себе на уме».

    Слово «конечно же», «конечно» — не выделяется запятыми в начале ответной реплики, произносимой тоном уверенности, убежденности. Пример: «Конечно же это так!»

    В остальных случаях запятая нужна.

    Выражения «в общем», «в общем-то» обособляются в значении «короче говоря, словом», тогда они являются вводными.

    «Прежде всего» обособляются как вводные в значении «во-первых» («Прежде всего, он довольно способный человек»).

    • Эти слова не выделяются в значении «сначала, сперва» («Прежде всего нужно обратиться к специалисту»).
    • Запятая после «а», «но» и т. д. не нужна: «Но прежде всего, хочу сказать».
    • При уточнении выделяется весь оборот: «Есть надежда, что эти предложения, прежде всего со стороны Минфина, не будут приняты или будут изменены».

    «По крайней мере», «по меньшей мере» — обособляются только при инверсии: «Этот вопрос обсуждался дважды, по крайней мере».

    «В свою очередь» — не выделяется запятой в значении «со своей стороны», «в ответ, когда наступила очередь». А качестве вводных обособляются.

    «В буквальном смысле» — не вводное, запятыми не выделяется

    «Следовательно». Если в значении «стало быть, таким образом, значит», то запятые нужны. Например: «Так вы, следовательно, наши соседи».

    • НО! Если в значении «поэтому, вследствие этого, исходя из того что», то запятая нужна только слева. Например: «Я нашла работу, следовательно денег у нас будет больше»; «Ты сердишься, следовательно ты не прав»; «Ты не можешь испечь пирог, следовательно испеку его я».

    «Как минимум». Если в значении «самое меньшее», то без запятых. Например: «Как минимум вымою посуду»; «Он допустил как минимум десяток ошибок».

    • НО! Если в значении сравнения с чем-либо, эмоциональной оценки, то с запятой. Например: «Как минимум, такой подход предполагает контроль», «Для этого нужно, как минимум, разбираться в политике».

    «То есть если», «особенно если» — запятая, как правило, не нужна

    «То есть» не является вводным словом и не выделяется запятыми с обеих сторон. Это союз, запятая ставится перед ним (а если в каких-то контекстах и ставится запятая после него, то по другим причинам: например, чтобы выделить некую обособленную конструкцию или придаточное предложение, которые идут после него). Например: «До станции еще пять километров, то есть час ходьбы» (запятая ну нужна), «До станции еще пять километров, то есть, если идти не торопясь, час ходьбы (запятая после «то есть» ставится, чтобы выделить придаточное предложение «если идти не торопясь»).

    «Во всяком случае» выделяются запятыми как вводные, если они употреблены в значении «по крайней мере».

    «Помимо того», «помимо этого», «помимо всего (прочего)», «кроме всего (прочего)» обособляются как вводные.

    • НО! «Помимо того что» — союз, запятая НЕ нужна. Например: «Помимо того что сам ничего не делает, еще и ко мне претензии предъявляет».

    «Благодаря этому», «благодаря тому», «благодаря тому-то» и «наряду с тем-то» — запятая, как правило, не требуется. Обособление факультативно. Наличие запятой ошибкой не является.

    «Тем более» — без запятой.

    «Тем более когда», «тем более что», «тем более если» и т. п. — запятая нужна перед «тем более». Например: «Вряд ли нужны такие аргументы, тем более что это ложное утверждение», «тем более если имеется в виду», «отдыхайте, тем более что вас ждет много работы», «не сидеть же вам дома, тем более если партнер приглашает на танцы».

    «Причем» — выделяется запятой только в середине предложения (слева).

    «Тем не менее» — запятая ставится в середине предложения (слева). Например: «Он все решил, тем не менее я постараюсь его переубедить».

    • НО! Если «но тем не менее», «если тем не менее» и т. п., то запятые НЕ нужны.

    Если «однако» в значении «но», тогда запятая с правой стороны НЕ ставится. (Исключение — если это междометие. Например: «Однако, какой ветер!»)

    «В конце концов» — если в значении «в итоге», то запятая НЕ ставится.

    «Действительно» не выделяется запятыми в значении «в самом деле» (то есть если это обстоятельство, выраженное наречием), если оно синонимично прилагательному «действительный» — «настоящий, подлинный». Например: «Сама кора у нее тонкая, не то что у дуба или сосны, которым действительно не страшны горячие солнечные лучи»; «Ты действительно очень устал».

    «Действительно» может выступать в роли вводного и обособляться. Вводное слово отличается интонационной обособленностью — выражает уверенность говорящего в истинности сообщаемого факта. В спорных случаях вопрос о расстановке знаков препинания решает автор текста.

    «Из-за того что» — запятая НЕ нужна, если это союз, то есть если можно заменить на «потому что». Например: «В детстве он проходил медицинскую проверку, из-за того что воевал во Вьетнаме», «может, все из-за того, что люблю, когда поет человек» (запятая нужна, т.к. на «потому что» заменить нельзя).

    «Так или иначе». Запятая нужна, если в значении — «как бы то ни было». Тогда это вводное. Например: «Она знала, что, так или иначе, она Анне выскажет все».

    • НО! Наречное выражение «так или иначе» (то же, что «тем или иным способом» или «в любом случае») НЕ требует постановки знаков препинания. Например: «Война так или иначе необходима».

    Всегда без запятых пишутся

    • в первую очередь
    • на первый взгляд
    • вроде
    • вроде бы
    • наверняка
    • аналогично
    • более или менее
    • буквально
    • вдобавок
    • в (конечном) итоге
    • в конечном счете
    • в крайнем случае
    • в лучшем случае
    • в любом случае
    • вместе с тем
    • в общем и целом
    • в основном
    • в особенности
    • в отдельных случаях
    • во что бы то ни стало
    • впоследствии
    • в противном случае
    • в результате
    • в связи с этим
    • все-таки
    • в таком случае
    • в то же время
    • в целом
    • в этой связи
    • главным образом
    • зачастую
    • исключительно
    • как максимум
    • между тем
    • на всякий случай
    • на крайний случай
    • по возможности
    • по мере возможности
    • по-прежнему
    • практически
    • приблизительно
    • при всем (при) том
    • при (всем) желании
    • при случае
    • при этом
    • равным образом
    • самое большее
    • самое меньшее
    • фактически
    • в целом
    • авось
    • будто
    • вдобавок
    • в довершение
    • небось
    • по предложению
    • по постановлению
    • по решению
    • словно
    • по традиции
    • якобы

    Запятая не ставится в начале предложения

    • «До того как… я оказалась…»
    • «С тех пор как…»
    • «Перед тем как…»
    • «Несмотря на то что…»
    • «По мере того как…»
    • «Для того чтобы…»
    • «Вместо того чтобы…»
    • «Вообще же…»
    • «В то время как…»
    • «Тем более что…»
    • «Тем не менее…»
    • «При том что…» (при том — отдельно); перед «что» запятая НЕ ставится.
    • «В случае если…»
    • «После того как…»
    • «Причем…»

    «Наконец» в значении «наконец-то» — запятыми НЕ выделяется.

    «И это при том, что…» — в середине предложения запятая ставится ВСЕГДА!

    «Исходя из этого, …» — в начале предложения запятая ставится. НО: «Он поступил так исходя из…» — запятая НЕ ставится.

    «Ведь если…, то…» — запятая перед «если» НЕ ставится, так как дальше идет вторая часть двойного союза — «то». Если «то» нет, тогда запятая перед «если» ставится!

    «Меньше чем на два года…» — запятая перед «чем» НЕ ставится, т.к. это НЕ сравнение.

    Запятая перед «КАК» ставится только в случае сравнения.

    «Такие политики, как Иванов, Петров, Сидоров…» — запятая ставится, т. к. есть существительное «политики».

    • НО: «… политики, такие как Иванов, Петров, Сидоров…» — перед «как» запятая НЕ ставится.

    Запятые НЕ ставятся

    «Дай бог», «не дай бог», «ради бога» — запятыми не выделяется, + слово «бог» пишется с маленькой буквы.

    НО: запятые ставятся в двух сторон

    • «Слава Богу» в середине предложения выделяется запятыми с обеих сторон (слово «Бог» в этом случае пишется с большой буквы) + в начале предложения — выделяется запятой (с правой стороны).
    • «Ей-богу» — в этих случаях запятые ставятся с двух сторон (слово «бог» в этом случае пишется с маленькой буквы).
    • «Боже мой» — выделяется запятыми с обеих сторон; в середине предложения «боже» — с маленькой буквы.

    Если вводное слово можно опустить или переставить в другое место предложения без нарушения его структуры (обычно это бывает при союзах «и» и «но»), то союз не входит во вводную конструкцию — запятая НУЖНА. Например: «Во-первых, стало темно, и, во-вторых, все устали».

    Если вводное слово убрать или переставить нельзя, то запятая после союза (обычно при союзе «а») НЕ ставится. Например: «Она просто забыла об этом факте, а может, никогда его и не запоминала», «…, а следовательно, …», «…, а может быть, …», «…, а значит,…».

    Если вводное слово можно изъять или переставить, то запятая НУЖНА после союза «а», поскольку он не связан с вводным словом, т. е. не образуются спаянные сочетания типа «а значит», «а впрочем», «а следовательно», «а может быть» и т. п.. Например: «Она его не просто не любила, а, может быть, даже презирала».

    Если в начале предложения стоит сочинительный союз (в присоединительном значении) («и», «да» в значении «и», «тоже», «также», «и то», «а то», «да и», «а также» и др.), а потом вводное слово, то запятая перед ним НЕ нужна. Например: «И действительно, не стоило этого делать»; «И пожалуй, нужно было поступить как-то иначе»; «И наконец, действие пьесы упорядочено и разделено на акты»; «Да кроме того, выяснились и другие обстоятельства»; «Но конечно, все закончилось благополучно».

    Бывает редко: если в начале предложения стоит присоединительный союз, а вводная конструкция выделяется интонационно, то запятые НУЖНЫ. Например: «Но, к великой моей досаде, Швабрин решительно объявил…»; «И, как водится, вспоминали только одно хорошее».

    Основные группы вводных слов и словосочетаний (выделяются запятыми + с обеих сторон в середине предложения)

    Выражающие чувства говорящего (радость, сожаление, удивление и т. д.) в связи с сообщением

    • к досаде
    • к изумлению
    • к несчастью
    • к огорчению
    • к прискорбию
    • к радости
    • к сожалению
    • к стыду
    • к счастью
    • к удивлению
    • к ужасу
    • на беду
    • на радость
    • на счастье
    • не ровен час
    • нечего греха таить
    • по несчастью
    • по счастью
    • странное дело
    • удивительное дело
    • чего доброго и др.

    Выражающие оценку говорящим степени реальности сообщаемого (уверенность, неуверенность, предположение, возможность)

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

    Указывающие на источник сообщаемого

    • говорят
    • дескать
    • мол
    • передают
    • по-вашему
    • по мнению…
    • помнится
    • по-моему
    • по-нашему
    • по преданию
    • по сведениям…
    • по словам…
    • по слухам
    • по сообщению…
    • по-твоему
    • слышно
    • сообщают и др.

    Указывающие на связь мыслей, последовательность изложения

    • в общем
    • во-первых,
    • во-вторых и т. д.
    • впрочем
    • значит
    • в частности
    • главное
    • далее
    • значит
    • итак
    • к примеру
    • кроме того
    • к слову сказать
    • кстати
    • кстати сказать
    • между прочим
    • наконец
    • наоборот
    • например
    • напротив
    • повторяю
    • подчеркиваю
    • сверх того
    • с другой стороны
    • с одной стороны
    • стало быть
    • таким образом и др.
    • как бы то ни было
    • как бы там ни было

    Указывающие на приемы и способы оформления высказываемых мыслей

    • вернее сказать
    • вообще говоря
    • другими словами
    • если можно так выразиться
    • если можно так сказать
    • иначе говоря
    • иными словами
    • коротко говоря
    • лучше сказать
    • мягко выражаясь
    • одним словом
    • попросту говоря
    • словом
    • собственно говоря
    • с позволения сказать
    • так сказать
    • точнее сказать
    • что называется и др.

    Представляющие собой призывы к собеседнику (читателю) с целью привлечь его внимание к сообщаемому, внушить определенное отношение к излагаемым фактам

    • верите (ли)
    • веришь (ли)
    • видите (ли)
    • видишь (ли)
    • вообрази(те)
    • допустим
    • знаете (ли)
    • знаешь (ли)
    • извини(те)
    • поверь(те)
    • пожалуйста
    • пойми(те)
    • понимаете (ли)
    • понимаешь (ли)
    • послушай(те)
    • предположим
    • представь(те) себе
    • прости(те)
    • скажем
    • согласись
    • согласитесь и др.

    Указывающие оценку меры того, о чем говорится

    • по крайней мере, по меньшей мере — обособляются только при инверсии: «Этот вопрос обсуждался дважды, по крайней мере».
    • самое большее
    • самое меньшее

    Показывающие степень обычности сообщаемого

    • бывает
    • бывало
    • по обыкновению
    • по обычаю
    • случается

    Выражающие экспрессивность высказывания:

    • кроме шуток
    • между нами будет сказано
    • между нами говоря
    • надо сказать
    • не в укор будет сказано
    • по правде
    • по совести
    • по справедливости
    • признаться сказать
    • сказать по чести
    • смешно сказать
    • честно говоря.

    Устойчивые выражения со сравнением (без запятых)

    • беден как церковная мышь
    • белый как лунь
    • белый как полотно
    • белый как снег
    • биться как рыба об лед
    • бледный как смерть
    • блестит как зеркало
    • болезнь как рукой сняло
    • бояться как огня
    • бродит как неприкаянный
    • бросился как безумный
    • бубнит как пономарь
    • вбежал как сумасшедший
    • везет как утопленнику
    • вертится как белка в колесе
    • видно как днем
    • визжит как поросенок
    • врет как сивый мерин
    • все идет как по маслу
    • все как на подбор
    • вскочил как ошпаренный
    • вскочил как ужаленный
    • глуп как пробка
    • глядел как волк
    • гол как сокол
    • голодный как волк
    • далек как небо от земли
    • дрожал как в лихорадке
    • дрожал как осиновый лист
    • ему все как с гуся вода
    • ждать как манны небесной
    • ждать как праздника
    • жить как кошка с собакой
    • жить как птица небесная
    • заснул как мертвый
    • застыл как статуя
    • затерялся как иголка в стоге сена
    • звучит как музыка
    • здоров как бык
    • знать как облупленного
    • знать как свои пять пальцев
    • идет как корове седло
    • идет рядом как пришитый
    • как в воду канул
    • кататься как сыр в масле
    • качается как пьяный
    • колыхался (колышется) как студень
    • красив как бог
    • красный как помидор
    • красный как рак
    • крепок (крепкий) как дуб
    • кричит как оглашенный
    • легкий как перышко
    • летит как стрела
    • лысый как колено
    • льет как из ведра
    • машет руками как мельница
    • мечется как угорелый
    • мокрый как мышь
    • мрачный как туча
    • мрут как мухи
    • надеяться как на каменную стену
    • народу как сельдей в бочке
    • наряжать как куклу
    • не видать как своих ушей
    • нем как могила
    • нем как рыба
    • нестись (несется) как угорелый
    • нестись (несется) как шальной
    • носится как дурак с писаной торбой
    • носится как курица с яйцом
    • нужен как воздух
    • нужен как прошлогодний снег
    • нужен как пятая спица в колеснице
    • нужен как собаке пятая нога
    • ободрать как липку
    • один как перст
    • остался как рак на мели
    • остановился как вкопанный
    • острый как бритва
    • отличаться как день от ночи
    • отличаться как небо от земли
    • печь как блины
    • побледнел как полотно
    • побледнел как смерть
    • повторял как в бреду
    • пойдешь как миленький
    • поминай как звали
    • помнить как во сне
    • попасть как кур во щи
    • поразить как обухом по голове
    • посыпаться как из рога изобилия
    • похожи как две капли воды
    • пошел ко дну как камень
    • появиться как по щучьему велению
    • преданный как собака
    • пристал как банный лист
    • провалиться как сквозь землю
    • проку (толку) как от козла молока
    • пропал как в воду канул
    • прямо как нож по сердцу
    • пылал как в огне
    • работает как вол
    • разбирается как свинья в апельсинах
    • развеялся как дым
    • разыграть как по нотам
    • расти как грибы после дождя
    • расти как на дрожжах
    • свалиться как снег на голову
    • свеж(ий) как кровь с молоком
    • свеж(ий) как огурчик
    • сидел как прикованный
    • сидеть как на иголках
    • сидеть как на угольях
    • слушал как завороженный
    • смотрел как зачарованный
    • спал как убитый
    • спешить как на пожар
    • стоит как истукан
    • стройный как кедр ливанский
    • тает как свечка
    • твердый как камень
    • темно как ночью
    • точен как часы
    • тощий как скелет
    • труслив как заяц
    • умер как герой
    • упал как подкошенный
    • уперся как баран
    • уперся как бык
    • упрям(ый) как осел
    • устал как собака
    • хитер как лиса
    • хитрый как лиса
    • хлещет как из ведра
    • ходил как в воду опущенный
    • ходил как именинник
    • ходить как по ниточке
    • холодный как лёд
    • худой как щепка
    • черный как смоль
    • черный как черт
    • чувствовать себя как дома
    • чувствовать себя как за каменной стеной
    • чувствовать себя как рыба в воде
    • шатался как пьяный
    • ше как на казнь
    • ясно как дважды два четыре
    • ясно как день и др.

    Не путайте с однородными членами.

    Не являются однородными и поэтому НЕ разделяются запятой следующие устойчивые выражения

    • ни то ни се;
    • ни рыба ни мясо;
    • ни стать ни сесть;
    • ни конца ни края;
    • ни свет ни заря;
    • ни слуху ни духу;
    • ни себе ни людям;
    • ни сном ни духом;
    • ни туда ни сюда;
    • ни за что ни про что;
    • ни дать ни взять;
    • ни ответа ни привета;
    • ни вашим ни нашим;
    • ни убавить ни прибавить;
    • и так и сяк;
    • и день и ночь;
    • и смех и горе;
    • и холод и голод;
    • и стар и млад;
    • о том о сем;
    • и то и другое;
    • и в том и в другом.

    (Общее правило: запятая не ставится внутри цельных выражений фразеологического характера, образованных двумя словами с противоположным значением, соединенными повторяющимся союзом «и» или «ни»)

    НЕ разделяются запятой

    1) Глаголы в одинаковой форме, указывающие на движение и его цель.

    • Пойду погуляю.
    • Сядь отдохни.
    • Пойди посмотри.

    2) Образующие смысловое единство.

    • Ждет не дождется.
    • Посидим поговорим.

    3) Парные сочетания синонимичного, антонимичного или ассоциативного характера.

    • Искать правду-истину.
    • Конца-краю нет.
    • Честь-хвала всем.
    • Пошло-поехало.
    • Все шито-крыто.
    • Любо-дорого посмотреть.
    • Вопросы купли-продажи.
    • Встречать хлебом-солью.
    • Связать по рукам-ногам.

    4) Сложные слова (вопросительно-относительные местоимения, наречия, которым что-то противопоставлено).

    • Уж кому-кому, а вам нельзя.
    • Уж где-где, а там всё есть.

    Источник: https://www.babyblog.ru/community/post/russian/1693057

    Выражение «по возможности» правильно пишется так, как здесь, раздельно в два слова, поскольку является устойчивым словосочетанием (фразеологизмом), имеющим в русской речи особое место и значение (см. далее).

    На письме не изменяется и, по необходимости, отделяется запятыми (также см. далее). Но писать его же слитно («повозможности») или как одно слово с приставкой через дефис («по-возможности») – совершенно неправильно, так как всё выражение «по возможности» состоит из двух слов: предлога «по» и существительного «возможность» в единственном числе предложного падежа. Только в единственном и только предложного. Выражения «не упустите возможности»«исходя из наличных возможностей», и т.п. орфографически и стилистически вполне корректны, но это уже обычные словесные конструкции, а не особенные фразеологизмы.

    Как его писать?

    На письме «по возможности» иногда выделяется запятыми, но не всегда.

    Проверка довольно-таки проста: если вместо словосочетания «по возможности» можно подставить одно слово «пожалуйста», то «по возможности» нужно «брать в запятые». Но если от такой подстановки всё предложение становится трудно читаемым и/или теряется его смысл, то надо писать без запятых. В целом же то или другое написание зависит от построения фразы, ведь то же самое возможно высказать по-разному:

    • «Прошу вас, по возможности, рассмотреть моё заявление в кратчайшие сроки» – сюда «пожалуйста» взамен «по возможности» вписывается естественным образом. Берём его в запятые.
    • «Прошу вас рассмотреть моё заявление по возможности скорее» – а вот сюда «пожалуйста» уже никак не подставишь, маловразумительно получится. Запятые не нужны.

    В обоих случаях постановка ударения и разделение переносами по воз-мо́ж-ности. Но! Когда это выражение заменимо на «пожалуйста», то разносить его по строкам нежелательно, поскольку оно в таком случае является предикативом (или же вводным словом, см. в конце).

    Откуда ошибки

    Кое-кто порой пишет предмет нашего внимания через дефис («по-возможности»), и даже слитно («повозможности»). То и другое совершенно неправильно, нету таких слов в русском языке. Искать источник ошибок долго не приходится, это тот самый пресловутый Викисловарь. В нём «по возможности» считается… наречием, т.е. самостоятельной частью речи! Но части речи это слова. Есть слова, пишущиеся через дефис («где-то», «кое-когда», «по-настоящему», «что-то», «чуть-чуть», и др.). Однако счесть два слова за одно это значит дореформировать родной язык до того, что у самих ум за разум зашёл. И никак иначе.

    Что это значит?

    Фразеологизм «по возможности» в русском языке имеет два сходных по смыслу значения:

    • Выражает просьбу как можно более поспособствовать делу: «Ждём ответа на наше предложение до окончания текущего отчётного периода, по возможности». Вариант без запятой: «Ждём ответа на наше предложение по возможности до окончания текущего отчётного периода».
    • То же, в ответных обещаниях – сделать всё возможное и/или посильное для выполнения просимого: «Даю слово пристроить вашего питомца по возможности наилучшим образом».

    Синонимические фразеологизмы (равнозначные выражения) в том и другом случае «если <это> возможно», «в меру <моих, своих, наших> сил», «насколько возможно», «насколько можно», «насколько <мне, нам> это посильно», «по мере возможности», «по мере <моих, своих, наших> сил». Архаичные синонимы «елико возможно», «коль можно», «сколь возможно».

    • То же – просьбу, пожелание или требование сгладить, смягчить, облегчить, минимизировать некое условие, фактор, параметр: «Подыщите мне детские ботиночки по возможности дешевле»; «Играйте по возможности тише – маленький заснул». Синоним «как можно».

    О тонкостях значения

    Сложности с запятыми при «по возможности» объясняются тем, что это словосочетание в предложении, выражающем одну и ту же мысль, может служить как вводным словом, так и существительным «возможность» в родительном падеже с предлогом «по». Всё зависит от того, какой скрытый смысл вы вкладываете в своё высказывание.

    Вводные слова не части речи и не части предложения, и потому выделение их в отдельную лингвистическую категорию спорно. Вводное слово (возможно, сочетание нескольких слов) выражает эмоции автора высказывания и/или даёт его оценку событию (предмету, факту, явлению). Своего собственного, присущего именно ему значения, вводное слово не имеет.

    Специфически вводными словами в русском языке считаются «спасибо» и «пожалуйста». Причислять их к частям речи нельзя, так они способны выражать противоположные по смыслу понятия: «Спасибо за содействие»«Спасибо, удружил, теперь вовек не расхлебать!»; «Пожалуйста, заходите»«Пожалуйста, выйдите вон!»

    Что касается «по возможности», то его употребление как вводного слова или фразеологизма, наделённого значением наречия, зависит от подтекста высказывания, от того, что в нём читается между строк; соответственно строится и предложение (фраза). Для придания предложению эмоциональности следует употреблять вводное слово; в нейтральных высказываниях лучше обойтись существительным с предлогом. Поясним на примерах, приведенных выше:

    «Ждём ответа на наше предложение до окончания текущего отчётного периода, по возможности». Здесь подтекст таков: «Ну, пожалуйста, нам ваш ответ нужен (или важен)». А вот если:

    «Ждём ответа на наше предложение по возможности до окончания текущего отчётного периода», то получатель между строк прочтёт что-то наподобие: «В общем ваш ответ нам желателен, но – как хотите. Вдруг что, обойдёмся и без вас».

    ***

    © ПишемПравильно.ру

    Автор: Садов Артур Александрович, лингвист-типолог

    Перечень академических источников, использовавшихся при подготовке материалов.

    Правописание этих слов надо знать:

    Проверить еще слово:

  • По мере загрязнения как пишется
  • По мере готовности как пишется
  • По мере приближения как пишется
  • По максимуму как пишется через дефис или нет
  • По мелочи как пишется дефис или нет