Код, который вы только что вставили и запустили, представляет собой вызываемую функцию fun с именем main(), содержащую аргумент в {} три оператора печати println
Упрощаем код это называется "рефакторинг" оператор печати заменяем на функцию printBorder()
fun main() {
printBorder()
println("Happy Birthday, Jhansi!")
printBorder()
}
fun printBorder() {
println("=======================")
}
Теперь упрощаем printBorder() "Выведите эту строку из 23 символов" на «Напечатайте этот 1 символ 23 раза». В коде вы делаете это с помощью repeat() оператор цикла
Вместо использования println() используйте print(), чтобы не переходить на новую строку после печати каждого символа =, после того, как вы закончите печатать линию границы, добавьте println()инструкцию для печати новой строки.
fun main(){ printBorder() println("Happy Birthday, Jhansi!") printBorder() }
fun printBorder(){ repeat(23){ print("=") } println() }
Запустите свой код. Вывод должен быть таким же, как и раньше, но на этот раз вы смогли создать границу, указав символ «=» только один раз!
Вы можете определить отдельную функцию для каждого из этих различных символов. Однако есть более эффективный способ сделать это. Вы можете повторно использовать уже написанную функцию и сделать ее более гибкой, чтобы она работала для разных типов символов.
Отличительной чертой функций является то, что вы можете вводить в них данные, используя аргументы. Вы кратко столкнулись с этим в предыдущей кодовой лаборатории, когда знакомились с main(). На этом шаге вы добавите аргумент в printBorder()функцию, чтобы она могла печатать любой шаблон границы, который вы указали.
В main()верхней части создайте переменную с именем borderдля шаблона границы. Это будет содержать текст, который будет повторяться для границы.
val border ="%"
Теперь передайте эту borderпеременную в оба вызова printBorder()функции в качестве аргумента. Вы делаете это, помещая borderв круглые скобки (), как если бы вы вводили текст для println()печати.
Ваша main()функция должна выглядеть как код ниже.
fun main(){ val border ="%" printBorder(border) println("Happy Birthday, Jhansi!") printBorder(border) }
Функция printBorder()возьмет это значение borderв качестве входных данных и выяснит, как распечатать всю границу.
Запустите свой код. Ваш код не выполняется, и вместо этого вы видите значки ошибок рядом с вашим кодом.
Посмотрите на панель вывода, и там сообщение об ошибке.
Как и раньше, в сообщении указывается, где находится ошибка, и дается подсказка, что это может быть. Важная часть: Too many arguments for public fun printBorder(). Вы вызываете printBorder()функцию и передаете границу в качестве входных данных. Однако printBorder()в данный момент определение функции не принимает никаких входных данных.
Исправьте эту ошибку, добавив аргумент границы в printBorder()определение функции. См. первую строку кода, как показано ниже.
fun printBorder(border:String){ repeat(23){ print("=") } println() }
Обратите внимание, что имя аргумента border.
После имени ставится двоеточие:
и слово String, которое является описанием того, какого рода или типа аргумент это.
A String— это фрагмент текста, состоящий из символов, заключенных в кавычки. Вы можете думать об этом как о бусинах, выстроенных в линию, чтобы сформировать ожерелье, как символы, выстроенные в линию, чтобы сформировать слова и текст. Указание того, что аргумент должен быть a, Stringпомогает системе обеспечить, чтобы ваш аргумент был текстом, а не, например, числом.
Запустите свой код. Функция printBorder()теперь принимает границу Stringв качестве входных данных. И код в main()вызовах printBorder(border)с borderаргументом. Ваш код должен работать без ошибок.
Посмотрите на вывод вашей программы в консоли , и она все еще показывает ту же границу, что и раньше?
Это не предполагаемое поведение! Вы попытались сделать рамку с символом "%", но программа все еще печатает рамку с символом "=". На следующих шагах вы узнаете, почему это происходит.
В редакторе обратите внимание на серый восклицательный знак. Этот значок указывает на предупреждение. Предупреждения — это проблемы с вашим кодом, на которые вам нужно обратить внимание, но они не мешают вашему коду работать.
Наведите указатель мыши на восклицательный знак, и появится сообщение. В нем говорится, что "Parameter 'border' is never used."это предупреждение объясняет проблему с выходом. Вы передаете в функцию новую строку для границы, но не используете ее для печати.
Измените printBorder()функцию, чтобы использовать переданный borderвместо печати "=". Это работает точно так же, как если бы borderэто была переменная, которую вы определили внутри функции!
fun printBorder(border:String){ repeat(23){ print(border) } println() }
Запустите свой код еще раз. Вывод должен выглядеть так, как показано ниже.
Отличная работа, вы решили проблему! Вот ваш готовый код.
fun main(){ val border ="%" printBorder(border) println("Happy Birthday, Jhansi!") printBorder(border) }
fun printBorder(border:String){ repeat(23){ print(border) } println() }
Вы сделали printBorder()функцию намного более гибкой, не добавляя много кода. Теперь вы можете напечатать рамку из разных символов с небольшим изменением.
[Необязательно] Изменив всего одну строку кода в main()функции, как вы будете печатать такие баннеры ко дню рождения?
Что делать, если вы хотите использовать другой шаблон длиной более 1 символа, скажем, "'-._,-'". Вы не стали бы повторять этот шаблон 23 раза, так как это было бы слишком долго. Вы могли бы повторить это, может быть, 4 раза. Для этого вы можете изменить количество повторений в repeat()операторе printBorder(). Тем не менее, вы можете сделать что-то лучше!
Вы можете определить более красивую границу на основе двух вещей:
Шаблон для повторения (который вы уже сделали)
Количество раз, которое вы хотите повторить шаблон
Вы можете создать переменные для каждого шаблона и количества повторений, а затем передать обе части информации в printBorder()функцию.
В main()измените границу, чтобы она была "'-._,-'"узором.
val border ="`-._,-'"
Запустите свой код и обратите внимание, что шаблон стал слишком длинным.
В main(), под определением border, создайте новую переменную с именем timesToRepeatколичества повторений. Установите его значение на 4.
val timesToRepeat =4
В main(), при вызове printBorder()добавьте количество повторений в качестве второго аргумента. Разделите два аргумента запятой.
printBorder(border, timesToRepeat)
Теперь main()функция должна выглядеть так:
fun main(){ val border ="`-._,-'" val timesToRepeat =4 printBorder(border, timesToRepeat) println("Happy Birthday, Jhansi!") printBorder(border, timesToRepeat) }
Как и прежде, этот код выдает ошибку, потому что у вас вызывается больше аргументов, printBorder()чем в определении printBorder().
Исправьте printBorder(), чтобы также принимать количество повторений в качестве входных данных. Добавьте запятую после аргумента, а затем дополнительный аргумент: timesToRepeat: Int. Первая строка определения вашей функции теперь выглядит так, как показано ниже.
fun printBorder(border:String, timesToRepeat:Int){
Уведомление:
Запятая разделяет два аргумента.
timesToRepeatимя аргумента,
с последующим двоеточием: символ,
а тип: Int. timesToRepeatявляется числом, поэтому вместо того, чтобы делать его типа String, вам нужно сделать его типа Int, что является сокращением от целого числа, целого числа.
Внутри printBorder()измените, repeatчтобы использовать timesToRepeatаргумент (вместо числа 23). Ваш printBorder()код должен выглядеть так.
fun printBorder(border:String, timesToRepeat:Int){ repeat(timesToRepeat){ print(border) } println() }
Запустите свой код. И вывод выглядит так, как показано ниже.
fun main(){ val border ="`-._,-'" val timesToRepeat =4 printBorder(border, timesToRepeat) println(" Happy Birthday, Jhansi!") printBorder(border, timesToRepeat) }
fun printBorder(border:String, timesToRepeat:Int){ repeat(timesToRepeat){ print(border) } println() }
Поздравляем! С функциями, аргументами, переменными и повторяющимся циклом вы изучили основные строительные блоки, которые используются почти во всех программах.
Сделайте перерыв, а затем приступайте к следующей задаче ниже, где вы создадите больше функций и циклов, и вы получите возможность построить гигантский торт с нужным количеством свечей всего за несколько строк программирования.
fun main(){ printBorder() println("Happy Birthday, Jhansi!") printBorder() }
fun printBorder(){ repeat(23){ print("=") } println() }
Запустите свой код. Вывод должен быть таким же, как и раньше, но на этот раз вы смогли создать границу, указав символ «=» только один раз!
Вы можете определить отдельную функцию для каждого из этих различных символов. Однако есть более эффективный способ сделать это. Вы можете повторно использовать уже написанную функцию и сделать ее более гибкой, чтобы она работала для разных типов символов.
Отличительной чертой функций является то, что вы можете вводить в них данные, используя аргументы. Вы кратко столкнулись с этим в предыдущей кодовой лаборатории, когда знакомились с main(). На этом шаге вы добавите аргумент в printBorder()функцию, чтобы она могла печатать любой шаблон границы, который вы указали.
В main()верхней части создайте переменную с именем borderдля шаблона границы. Это будет содержать текст, который будет повторяться для границы.
val border ="%"
Теперь передайте эту borderпеременную в оба вызова printBorder()функции в качестве аргумента. Вы делаете это, помещая borderв круглые скобки (), как если бы вы вводили текст для println()печати.
Ваша main()функция должна выглядеть как код ниже.
fun main(){ val border ="%" printBorder(border) println("Happy Birthday, Jhansi!") printBorder(border) }
Функция printBorder()возьмет это значение borderв качестве входных данных и выяснит, как распечатать всю границу.
Запустите свой код. Ваш код не выполняется, и вместо этого вы видите значки ошибок рядом с вашим кодом.
Посмотрите на панель вывода, и там сообщение об ошибке.
Как и раньше, в сообщении указывается, где находится ошибка, и дается подсказка, что это может быть. Важная часть: Too many arguments for public fun printBorder(). Вы вызываете printBorder()функцию и передаете границу в качестве входных данных. Однако printBorder()в данный момент определение функции не принимает никаких входных данных.
Исправьте эту ошибку, добавив аргумент границы в printBorder()определение функции. См. первую строку кода, как показано ниже.
fun printBorder(border:String){ repeat(23){ print("=") } println() }
Обратите внимание, что имя аргумента border.
После имени ставится двоеточие:
и слово String, которое является описанием того, какого рода или типа аргумент это.
A String— это фрагмент текста, состоящий из символов, заключенных в кавычки. Вы можете думать об этом как о бусинах, выстроенных в линию, чтобы сформировать ожерелье, как символы, выстроенные в линию, чтобы сформировать слова и текст. Указание того, что аргумент должен быть a, Stringпомогает системе обеспечить, чтобы ваш аргумент был текстом, а не, например, числом.
Запустите свой код. Функция printBorder()теперь принимает границу Stringв качестве входных данных. И код в main()вызовах printBorder(border)с borderаргументом. Ваш код должен работать без ошибок.
Посмотрите на вывод вашей программы в консоли , и она все еще показывает ту же границу, что и раньше?
Это не предполагаемое поведение! Вы попытались сделать рамку с символом "%", но программа все еще печатает рамку с символом "=". На следующих шагах вы узнаете, почему это происходит.
В редакторе обратите внимание на серый восклицательный знак. Этот значок указывает на предупреждение. Предупреждения — это проблемы с вашим кодом, на которые вам нужно обратить внимание, но они не мешают вашему коду работать.
Наведите указатель мыши на восклицательный знак, и появится сообщение. В нем говорится, что "Parameter 'border' is never used."это предупреждение объясняет проблему с выходом. Вы передаете в функцию новую строку для границы, но не используете ее для печати.
Измените printBorder()функцию, чтобы использовать переданный borderвместо печати "=". Это работает точно так же, как если бы borderэто была переменная, которую вы определили внутри функции!
fun printBorder(border:String){ repeat(23){ print(border) } println() }
Запустите свой код еще раз. Вывод должен выглядеть так, как показано ниже.
Отличная работа, вы решили проблему! Вот ваш готовый код.
fun main(){ val border ="%" printBorder(border) println("Happy Birthday, Jhansi!") printBorder(border) }
fun printBorder(border:String){ repeat(23){ print(border) } println() }
Вы сделали printBorder()функцию намного более гибкой, не добавляя много кода. Теперь вы можете напечатать рамку из разных символов с небольшим изменением.
[Необязательно] Изменив всего одну строку кода в main()функции, как вы будете печатать такие баннеры ко дню рождения?
Что делать, если вы хотите использовать другой шаблон длиной более 1 символа, скажем, "'-._,-'". Вы не стали бы повторять этот шаблон 23 раза, так как это было бы слишком долго. Вы могли бы повторить это, может быть, 4 раза. Для этого вы можете изменить количество повторений в repeat()операторе printBorder(). Тем не менее, вы можете сделать что-то лучше!
Вы можете определить более красивую границу на основе двух вещей:
Шаблон для повторения (который вы уже сделали)
Количество раз, которое вы хотите повторить шаблон
Вы можете создать переменные для каждого шаблона и количества повторений, а затем передать обе части информации в printBorder()функцию.
В main()измените границу, чтобы она была "'-._,-'"узором.
val border ="`-._,-'"
Запустите свой код и обратите внимание, что шаблон стал слишком длинным.
В main(), под определением border, создайте новую переменную с именем timesToRepeatколичества повторений. Установите его значение на 4.
val timesToRepeat =4
В main(), при вызове printBorder()добавьте количество повторений в качестве второго аргумента. Разделите два аргумента запятой.
printBorder(border, timesToRepeat)
Теперь main()функция должна выглядеть так:
fun main(){ val border ="`-._,-'" val timesToRepeat =4 printBorder(border, timesToRepeat) println("Happy Birthday, Jhansi!") printBorder(border, timesToRepeat) }
Как и прежде, этот код выдает ошибку, потому что у вас вызывается больше аргументов, printBorder()чем в определении printBorder().
Исправьте printBorder(), чтобы также принимать количество повторений в качестве входных данных. Добавьте запятую после аргумента, а затем дополнительный аргумент: timesToRepeat: Int. Первая строка определения вашей функции теперь выглядит так, как показано ниже.
fun printBorder(border:String, timesToRepeat:Int){
Уведомление:
Запятая разделяет два аргумента.
timesToRepeatимя аргумента,
с последующим двоеточием: символ,
а тип: Int. timesToRepeatявляется числом, поэтому вместо того, чтобы делать его типа String, вам нужно сделать его типа Int, что является сокращением от целого числа, целого числа.
Внутри printBorder()измените, repeatчтобы использовать timesToRepeatаргумент (вместо числа 23). Ваш printBorder()код должен выглядеть так.
fun printBorder(border:String, timesToRepeat:Int){ repeat(timesToRepeat){ print(border) } println() }
Запустите свой код. И вывод выглядит так, как показано ниже.
fun main(){ val border ="`-._,-'" val timesToRepeat =4 printBorder(border, timesToRepeat) println(" Happy Birthday, Jhansi!") printBorder(border, timesToRepeat) }
fun printBorder(border:String, timesToRepeat:Int){ repeat(timesToRepeat){ print(border) } println() }
Поздравляем! С функциями, аргументами, переменными и повторяющимся циклом вы изучили основные строительные блоки, которые используются почти во всех программах.
Сделайте перерыв, а затем приступайте к следующей задаче ниже, где вы создадите больше функций и циклов, и вы получите возможность построить гигантский торт с нужным количеством свечей всего за несколько строк программирования.
fun main() {
printBorder()
println("Happy Birthday, Jhansi!")
printBorder()
}
fun printBorder() {
repeat(23) {
print("=")
}
println()
}
На этот раз вы смогли создать границу, указав символ «=» только один раз!
Отличительной чертой функций является то, что вы можете вводить в них данные, используя аргументы.
Создайте шаблон границы
val border = "%"
Теперь передайте эту border переменную в оба вызова printBorder()функции в качестве аргумента. Вы делаете это, помещая border в круглые скобки (), как если бы вы вводили текст для println()печати.
fun main() {
val border = "%"
printBorder(border)
println("Happy Birthday, Jhansi!")
printBorder(border)}
Функция printBorder()возьмет это значение border в качестве входных данных и выяснит, как распечатать всю границу.
чтобы функция могла печатать шаблон границы (val border = "%")
printBorder()теперь принимает границу String в качестве входных данных. И код в main() вызовах printBorder(border) с border аргументом.
//A String - строковый тип («нить, вереница») двоеточие перед ним обязательно: Указание того, что этот тип аргумента должен быть String помогает системе обеспечить, чтобы он был текстом "%", а не, например, числом.
fun printBorder(border: String)
Далее меняем:
printBorder()функцию, чтобы использовать переданный border вместо печати "=" на print(border)
print("=") //Старая ссылка, битая
print(border) // Это работает точно так же, как если бы border это была переменная, которую вы определили внутри функции! Тут не понял. Скорее всего это ссылка на val border = "%"
repeat(23) - оператор цикла его оставляем как есть
Комментариев нет:
Отправить комментарий