функция и ее параметры

Учу swift не так давно и есть некоторые не понятны моменты, а именно для чего функции, инициализатору нужен параметр с внешним именем и с локальным именем. Ответь те как можно понятнее и желатьно примером

   struct Celsius {
   var temperatureInCelsius: Double
   init(fromFahrenheit fahrenheit: Double) {
       temperatureInCelsius = (fahrenheit - 32.0) / 1.8
   }
   init(fromKelvin kelvin: Double) {
       temperatureInCelsius = kelvin - 273.15
   }
}

 let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
 // boilingPointOfWater.temperatureInCelsius is 100.0
 let freezingPointOfWater = Celsius(fromKelvin: 273.15)
// freezingPointOfWater.temperatureInCelsius is 0.0

Ответы (1 шт):

Автор решения: schmidt9

Не совсем понятно, почему "argument label" здесь переведено как "внешнее имя (параметра)" (ср. оригинал и адекватный перевод), то же касается и "локального имени". Собственно по указанным ссылкам вопрос с параметрами и их ярлыками разъяснен.

Что касается вопроса "для чего"

  • для различения сигнатур функций
  • для удобства и следования традиции (здесь Swift наследует особенности именования в Objective C)

Пример

struct Celsius {
    var temperatureInCelsius: Double
    
    // 1. ярлык и параметр
    
    init(fromFahrenheit fahrenheit: Double) {
        temperatureInCelsius = (fahrenheit - 32.0) / 1.8
    }
    
    // 2. только параметр
    
    init(fahrenheit: Double) {
        temperatureInCelsius = (fahrenheit - 32.0) / 1.8
    }
    
    // 3. параметр с пропуском
    
    init(_ fahrenheit: Double) {
        temperatureInCelsius = (fahrenheit - 32.0) / 1.8
    }
    
    init(fromKelvin kelvin: Double) {
        temperatureInCelsius = kelvin - 273.15
    }
}

// 1
let boilingPointOfWater1 = Celsius(fromFahrenheit: 212.0)
// 2
let boilingPointOfWater2 = Celsius(fahrenheit: 212.0)
// 3
let boilingPointOfWater3 = Celsius(212.0)
→ Ссылка