Разное

Объявление переменных: Типы данных

Содержание

Объявление? Определение? Инициализация? — SwiftBook

В чем разница между объявлением переменной, её определением и инициализацией

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

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

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

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

Объявление переменной или константы

Итак, выражение называется объявлением переменной или декларированием. На английском это выглядит так — Declaring Constants and Variables:

var a = 10

В приведенном примере задана переменная (var), задано имя переменной (а) и задано значение переменной (10).

Определение переменной или константы

Как известно, объявить переменную мы можем и без указания значения. Но тогда нужно указать тип данных будущего значения.

Например:

var b: Int?

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

Заодно и еще один термин — аннотация типа. Это вот как раз результат действия по определению, а именно слово

Int?.

Аннотация типа может быть простая, состоящая из одного слова, обозначающая тип данных, так и составная. Например, в кортежах (tuples) может быть и такая запись

var b: (Int, Int, Int)

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

Инициализация переменной или константы

В первом примере, который мы продублируем ниже, где происходит не только объявление переменной, но и её инициализация:

var a = 10

Инициализация означает, что переменная запущена в работу, ей присвоено начальное значение, она инициализирована. Без присвоения начального значения переменная просто объявлена, а с начальным значением она еще и инициализирована.

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

var b: Int

Три действия — объявление, определение, инициализация

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

var a: Int = 10

Но, как мы помним, Swift рекомендует экономить время, если есть значение, он может самостоятельно определить тип данных.

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

Ковбойская история

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

Итак, в бар входит в ковбой и требует выпивку — это объявление, декларация намерений.

Бармен спрашивает — чем будешь платить: деньгами, отдашь пистолет или отработаешь мытьем посуды? — Я заплачу, — отвечает ковбой, — у меня есть деньги. — Это определение типа данных.

Тогда плати 5 баксов и получай выпивку — Ковбой платит и веселье начинается — Это инициализация, присвоение начального значения, запуск процесса в работу.

Заметка

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

Int, String, Double, Bool и т.д.
Но, чтобы как-то все же отличать типы данных значений от констант и переменных будем называть последние некими сущностями, элементами языка программирования. Тогда у нас будут типы данных для значений и типы данных для определенных элементов программирования (к которым относятся в том числе константы и переменные).

Автор: Максим Савостьянов

Переменная в программировании. Что это такое?

Научим создавать свои игры, сайты и приложения

Начать учиться

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

Формальное определение переменной звучит так: «поименованная либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным».

Такое объяснение может показаться достаточно сложным. Но попробуем разобраться на примере и увидим, что на самом деле переменная — это просто!

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

Но ведь в таком случае мы не сможем использовать один и тот же шаблон для всех адресатов? Как вы уже могли догадаться — сможем, и здесь нам на помощь как раз придут переменные. Нам нужно всего лишь завести для имени адреса переменную (назовем ее name) и задавать ей нужное значение перед отправкой письма (подробнее об объявлении переменных мы поговорим ниже):

String name = "Иван"

И теперь шаблон приветствия нашего письма будет выглядеть так:

"Привет, {{ name }}!"

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

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

Такое объяснение достаточно близко к тому, как на самом деле устроено хранение в памяти компьютера: переменная — это выделенная область памяти, в которой хранятся наши данные.

Давайте рассмотрим еще один пример использования переменных.

Мы написали программу для рассылки приглашений, и нам хочется узнать, сколько всего писем мы отправили. Введем для хранения количества переменную-счетчик и сразу зададим ей значение 0, так как в самом начале мы еще не отправили ни одного письма:

Int counter = 0

При отправке очередного письма мы будем увеличивать счетчик:

sendMail() // здесь функция, которая занимается отправкой письма
counter = counter + 1 // увеличиваем значение счетчика

После того как мы разослали письма всем нашим адресатам, мы можем узнать их количество:

log(counter) // на экран будет выведено число, равное количеству писем, например 5

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

Займите ребёнка полезным хобби, не отрывая от экрана

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

Объявление переменных

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

Как правило, чтобы использовать переменную в программе, сначала эту переменную нужно объявить. В разных языках программирования объявление переменных несколько различается, но встречаются похожие шаблоны. Например, часто при объявлении используется специальное ключевое слово, которое говорит компьютеру, что это новая переменная. Порой в качестве такого слова используют var — сокращение от английского variable (переменная). Обычно далее идет название переменной.

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

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

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

Создатели языка программирования могут применять самые разные подходы: например, некоторые не используют ключевое слово; где-то объявление и инициализация происходят всегда вместе, а где-то — всегда отдельно; где-то может не указываться тип.

Посмотрим на примеры объявления переменных в разных языках.

В Javascript:

let name = "Том"

В Java:

String name = "Том"

В PHP:

$name = 'Том'

В Pascal:

var name: string;
name := "Том"

Типы переменных

Как мы отметили выше, у переменной есть такое свойство, как тип.

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

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

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

Области видимости

Теперь стоит поговорить о таком понятии, как область видимости переменных, или просто область видимости.

Объявляя переменные в нашей программе, мы можем столкнуться с ситуацией, когда доступ к какой-либо конкретной переменной требуется только в определенной функции или внутри определенного блока кода. «Мы можем просто объявить переменную внутри этой функции или блока», — скажете вы и будете правы. Функция, в свою очередь, может содержать внутри себя вызов других функций или же сама быть вызвана в какой-либо функции. Что в таких случаях будет происходить с доступом к нашей переменной? Разные языки программирования по-разному решают этот вопрос — и именно здесь мы подходим к понятию области видимости. Дадим более техническое определение этого термина.

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

Виды переменных

Переменные могут быть простыми (иногда их еще называют скалярными) и сложными. Простые переменные содержат только одно значение в данный момент времени. Например, это может быть число, строка или логическое значение (true/false). Сложные же содержат в себе список значений. В разных языках программирования такими переменными являются, например, список, массив, объект, кортеж и т. д.

Пример простой переменной:

var name = "Том"

И сложной:

var names = ["Том", "Джерри"]

Переменные в функциональных языках

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

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

Важным свойством функциональных языков является иммутабельность (неизменность). Это означает, что если мы положили данные в какое-то хранилище, то уже не можем их изменить. А для изменения мы должны написать функцию, которая будет возвращать измененные данные. Таким образом, все «переменные» в такой программе окажутся на самом деле «постоянными» (константами). У такого подхода есть свои плюсы и минусы. В программировании он встречается реже, но знать об этом полезно!

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

Нет, это не «просто игрушка»

Roblox — одна из лучших платформ, чтобы стартовать в программировании! Запишите ребёнка на бесплатный урок в Skysmart Pro — расскажем, какие мощные игры и проекты он может создавать

Михаил Прокудин

Фронтенд-разработчик

К предыдущей статье

Подборка сервисов и программ для программирования

К следующей статье

Цифровая грамотность

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

На вводном уроке с методистом

  1. Подберём курс по уровню, возрасту и интересам ребёнка

  2. Расскажем, как проходят занятия

Как определить/объявить типы строковых переменных

АвторSteve Campbell

Часы

Обновлено

Что такое переменная в Python?

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

Типы переменных Python

Каждое значение в Python имеет тип данных. Различными типами данных в Python являются числа, список, кортеж, строки, словарь и т. д. Переменные в Python могут быть объявлены любым именем или даже алфавитом, таким как a, aa, abc и т. д.

В этом уроке мы узнаем,

  • Как объявить и использовать переменную
  • Повторное объявление переменной
  • Объединение переменных
  • Локальные и глобальные переменные
  • Удалить переменную

Как объявить и использовать переменную

Рассмотрим пример. Мы определим переменную в Python, объявим ее как «a» и напечатаем ее.

 а=100
print (a) 

Повторное объявление переменной

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

Здесь у нас Python объявляет переменную, инициализированную значением f=0.

Позже мы повторно присваиваем переменной f значение «guru99»

Пример Python 2

 # Объявить переменную и инициализировать ее
ф = 0
напечатать f
# повторное объявление переменной работает
ф = 'гуру99'
print f 

Пример Python 3

 # Объявить переменную и инициализировать ее
ф = 0
печать (е)
# повторное объявление переменной работает
ф = 'гуру99'
print(f) 

Конкатенация строк Python и переменная

Давайте посмотрим, сможете ли вы объединить разные типы данных, такие как строка и число. Например, мы соединим «Гуру» с числом «99».

В отличие от Java, который объединяет число со строкой без объявления числа как строки, при объявлении переменных в Python требуется объявлять число как строку, иначе будет отображаться TypeError

Для следующего кода вы получите неопределенный вывод —

 а = "Гуру"
б = 99
напечатать а+б
 

После того как целое число объявлено как строка, оно может объединять в выводе как «Guru» + str («99») = «Guru99».

 а="Гуру"
б = 99
print(a+str(b)) 

Типы переменных Python: локальные и глобальные

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

Давайте разберемся в этих типах переменных Python с разницей между локальными и глобальными переменными в программе ниже.

  1. Давайте определим переменную в Python, где переменная «f» является глобальной по области действия и ей присвоено значение 101, которое печатается в выводе
  2. Переменная f снова объявляется в функции и принимает локальную область действия . Ему присваивается значение «Я изучаю Python». который распечатывается как вывод. Эта переменная объявления Python отличается от глобальной переменной «f», определенной ранее 9.
    0020
  3. После завершения вызова функции локальная переменная f уничтожается. В строке 12, когда мы снова выводим значение «f», отображается ли значение глобальной переменной f=101
  4. .

Пример Python 2

 # Объявить переменную и инициализировать ее
ф = 101
напечатать f
# Глобальные и локальные переменные в функциях
определение какой-то функции():
# глобальное f
    f = 'Я изучаю Python'
    напечатать f
некоторая функция ()
print f 

Python 3 Пример

 # Объявить переменную и инициализировать ее
ф = 101
печать (е)
# Глобальные и локальные переменные в функциях
определение какой-то функции():
# глобальное f
    f = 'Я изучаю Python'
    печать (е)
некоторая функция ()
print(f) 

При объявлении переменной Python с использованием ключевого слова global, вы можете ссылаться на глобальную переменную внутри функции.

  1. Переменная «f» является глобальной в области видимости и получает значение 101, которое печатается в выводе
  2. Переменная f объявлена ​​с использованием ключевого слова глобальный . Это НЕ локальная переменная , а та же глобальная переменная, объявленная ранее. Следовательно, когда мы печатаем его значение, вывод равен 101
  3. .
  4. Мы изменили значение «f» внутри функции. После завершения вызова функции измененное значение переменной «f» сохраняется. В строке 12, когда мы снова выводим значение «f», отображается ли значение «изменение глобальной переменной»

Python 2 Пример

 ф = 101;
напечатать f
# Глобальные и локальные переменные в функциях
определение какой-то функции():
  глобальный f
  напечатать f
  f = "изменение глобальной переменной"
некоторая функция ()
print f 

Python 3 Пример

 f = 101;
печать (е)
# Глобальные и локальные переменные в функциях
определение какой-то функции():
  глобальный f
  печать (е)
  f = "изменение глобальной переменной"
некоторая функция ()
print(f) 

Удалить переменную

Вы также можете удалить переменные Python с помощью команды del «имя переменной».

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

Пример удаления переменной Python или очистки переменной Python:

 f = 11;
печать (е)
дель ф
print(f) 

Резюме:

  • Переменные относятся к «конвертам» или «сегментам», где можно хранить информацию и ссылаться на нее. Как и любой другой язык программирования, Python также использует переменную для хранения информации.
  • Переменные могут быть объявлены любым именем или даже алфавитом, таким как a, aa, abc и т. д.
  • Переменные могут быть повторно объявлены даже после того, как вы объявили их один раз
  • Константы Python можно понимать как типы переменных, которые содержат значение, которое нельзя изменить. Обычно на константы Python ссылаются из других файлов. Константа определения Python объявлена ​​в новом или отдельном файле, который содержит функции, модули и т. д.
  • Типы переменных в Python или типы переменных Python: локальные и глобальные
  • Объявить локальную переменную, если вы хотите использовать ее для текущей функции
  • Объявить глобальную переменную, если вы хотите использовать ту же переменную для остальной части программы
  • Для удаления переменной используется ключевое слово «del».

Изучение языка программирования Kotlin

Kotlin — это язык программирования широко используется разработчиками Android во всем мире. Эта тема служит Kotlin ускоренный курс, который поможет вам быстро приступить к работе.

Объявление переменной

Kotlin использует два разных ключевых слова для объявления переменных: val и var .

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

В приведенном ниже примере count — это переменная типа Int , которой присвоено значение начальное значение 10 :

 количество переменных: Int = 10
 

Int — это тип, представляющий целое число, один из многих числовых типов, может быть представлен в Котлине. Подобно другим языкам, вы также можете использовать Byte , Short , Long , Float и Double в зависимости от ваших числовых данных.

Ключевое слово var означает, что вы можете при необходимости переназначить значения для count . Для например, вы можете изменить значение count from 10 to 15 :

 var count: Int = 10
количество = 15
 

Однако некоторые значения не предназначены для изменения. Рассмотрим строку , называемую имя_языка . Если вы хотите, чтобы languageName всегда содержал значение «Kotlin», то вы можете объявить languageName , используя ключевое слово val :

 val languageName: String = "Kotlin"
 

Эти ключевые слова позволяют указать, что можно изменить. Используйте их, чтобы ваше преимущество по мере необходимости. Если ссылка на переменную должна быть переназначаемой, то объявить это как вар . В противном случае используйте val .

Вывод типа

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

Поскольку значение "Kotlin" имеет тип String , компилятор делает вывод, что languageName также является String . Обратите внимание, что Kotlin — это статически типизированный . язык. Это означает, что тип разрешается во время компиляции и никогда изменения.

В следующем примере languageName выводится как String , поэтому вы не можете вызывать любые функции, не являющиеся частью класса String :

 val languageName = "Kotlin"
val upperCaseName = имя_языка. toUpperCase()
// Не удается скомпилировать
имя_языка.inc()
 

toUpperCase() — это функция, которую можно вызывать только для переменных типа Строка . Поскольку компилятор Kotlin вывел languageName как Строка , вы можете безопасно вызывать toUpperCase() . inc() , однако, является оператором Int функция, поэтому ее нельзя вызвать для String . Подход Kotlin к типу вывод дает вам как краткость, так и безопасность типов.

Нулевая безопасность

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

 // Не удается скомпилировать
val имя_языка: String = null
 

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

 val languageName: String? = ноль
 

Со строкой ? , вы можете назначить значение String или null для имя_языка .

Вы должны осторожно обращаться с переменными, допускающими значение NULL, иначе вы рискуете NullPointerException . В Java, например, если вы попытаетесь вызвать метод при нулевом значении ваша программа аварийно завершает работу.

Kotlin предоставляет ряд механизмов для безопасной работы с nullable переменные. Для получения дополнительной информации см. Распространенные шаблоны Kotlin в Android: Nullability.

Условные операторы

В Kotlin есть несколько механизмов реализации условной логики. Большинство общим из них является оператор if-else . Если выражение заключено в скобки рядом с , если ключевое слово оценивается как true , тогда код внутри эта ветвь (т. е. следующий за ней код, завернутый в фигурные фигурные скобки) выполняется. В противном случае выполняется код в ветке else .

 если (счетчик == 42) {
    println("У меня есть ответ")
} еще {
    println("От меня ускользает ответ")
}
 

Вы можете представить несколько условий, используя else if . Это позволяет вам представлять более детализированная, сложная логика в одном условном операторе, как показано на следующий пример:

 если (счетчик == 42) {
    println("У меня есть ответ")
} иначе если (число > 35) {
    println("Ответ близок. ")
} еще {
    println("От меня ускользает ответ")
}
 

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

 val answerString: String = if (count == 42) {
    «У меня есть ответ».
} иначе если (число > 35) {
    «Ответ близок».
} еще {
    «Ответ ускользает от меня».
}
println (строка ответа)
 

Неявно каждая условная ветвь возвращает результат выражения на своем последняя строка, поэтому вам не нужно использовать ключевое слово return . Потому что результат все три ветви имеют тип String , результатом выражения if-else является также типа String . В этом примере answerString назначается начальный значение из результата выражения if-else. Вывод типа можно использовать для опустите явное объявление типа для answerString , но часто это полезно идея включить его для ясности.

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

По мере роста сложности вашего условного оператора вы можете рассмотреть заменив ваше выражение if-else на , когда выражение , как показано на следующий пример:

 val answerString = when {
    count == 42 -> "У меня есть ответ."
    count > 35 -> «Ответ близок».
    else -> "Ответ ускользает от меня."
}
println (строка ответа)
 

Каждая ветвь в выражении , когда представлена ​​условием, стрелкой ( -> ) и результат. Если условие слева от стрелки оценивается как true, то результат выражения в правой части равен вернулся. Обратите внимание, что выполнение не переходит из одной ветки в другую. Код в 9.0189, когда пример выражения функционально эквивалентен приведенному в предыдущий пример, но, возможно, его легче читать.

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

 val languageName: String? = ноль
если (languageName != ноль) {
    // Не нужно писать languageName?.toUpperCase()
    println(languageName.toUpperCase())
}
 

В условной ветви languageName может рассматриваться как необнуляемый. Kotlin достаточно умен, чтобы понять, что условие выполнения ветки заключается в том, что languageName не содержит нулевое значение, поэтому вам не нужно обрабатывать languageName как обнуляемый в этой ветке. Этот умный кастинг работает для null чеки, типовые чеки, или любое условие, которое удовлетворяет договор.

Функции

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

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

Основываясь на предыдущих примерах, вот полная функция Kotlin:

 fun generateAnswerString(): String {
    val answerString = если (количество == 42) {
        «У меня есть ответ».
    } еще {
        «Ответ ускользает от меня»
    }
    вернуть строку ответа
}
 

Функция в приведенном выше примере имеет имя generateAnswerString . Это не принимает никаких входных данных. Он выводит результат типа String . Чтобы позвонить функции, используйте ее имя, за которым следует оператор вызова ( () ). в В приведенном ниже примере переменная answerString инициализируется результатом generateAnswerString() .

 значение answerString = generateAnswerString()
 

Функции могут принимать аргументы в качестве входных данных, как показано в следующем примере:

 fun generateAnswerString(countThreshold: Int): String {
    val answerString = if (count > countThreshold) {
        «У меня есть ответ». 
    } еще {
        «Ответ ускользает от меня».
    }
    вернуть строку ответа
}
 

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

При вызове этой функции вы должны включить аргумент внутри функции скобки вызова:

 val answerString = generateAnswerString(42)
 

Упрощение объявлений функций

generateAnswerString() — довольно простая функция. Функция объявляет переменная, а затем сразу возвращается. Когда результат одного выражения возвращается из функции, вы можете не объявлять локальную переменную напрямую возвращая результат выражения if-else, содержащегося в функции, как показано в следующем примере:

 fun generateAnswerString(countThreshold: Int): String {
    вернуть, если (количество> countThreshold) {
        «У меня есть ответ». 
    } еще {
        «Ответ ускользает от меня».
    }
}
 

Вы также можете заменить ключевое слово return оператором присваивания:

 fun generateAnswerString(countThreshold: Int): String = if (count > countThreshold) {
        «У меня есть ответ»
    } еще {
        «Ответ ускользает от меня»
    }
 

Анонимные функции

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

 val stringLengthFunc: (String) -> Int = { input ->
    input.length
}
 

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

В приведенном выше примере stringLengthFunc содержит ссылку на анонимный функция, которая принимает String в качестве входных данных и возвращает длину входных данных Строка как вывод типа Int . По этой причине тип функции обозначается как (String) -> Int . Однако этот код не вызывает функцию. Чтобы получить результат функции, вы должны вызвать ее так же, как если бы вы названная функция. Вы должны указать String при вызове stringLengthFunc , как показано в следующем примере:

 val stringLengthFunc: (String) -> Int = { input ->
    input.length
}
val stringLength: Int = stringLengthFunc("Android")
 

Функции высшего порядка

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

Вот пример функции высшего порядка:

 fun stringMapper(str: String, mapper: (String) -> Int): Int {
    // Вызов функции
    возвращаемый преобразователь (ул.)
}
 

Функция stringMapper() принимает строку вместе с функцией, которая получает значение Int из String , которое вы передаете ему.

Вы можете вызвать stringMapper() , передав String и функцию, которая удовлетворяет другому входному параметру, а именно функции, которая принимает String как input и выводит Int , как показано в следующем примере:

 stringMapper("Android", { input ->
    input. length
})
 

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

 stringMapper("Android") { input ->
    input.length
}
 

Анонимные функции можно найти в стандартной библиотеке Kotlin. Для больше информации см. Функции высшего порядка и лямбды.

Классы

Все упомянутые до сих пор типы встроены в язык программирования Kotlin. язык. Если вы хотите добавить свой собственный тип, вы можете определить класс используя 9Ключевое слово 0189 class , как показано в следующем примере:

 class Car
 

Свойства

Классы представляют состояние с помощью свойств. А собственность переменная уровня класса, которая может включать геттер, сеттер и резервное поле. Поскольку для движения машине нужны колеса, вы можете добавить список объектов Wheel в качестве свойство Car , как показано в следующем примере:

 class Car {
    val колеса = listOf()
}
 

Обратите внимание, что колеса является общедоступным val , что означает, что колеса могут быть доступны из вне класса Автомобиль , и его нельзя переназначить. Если вы хотите получить instance of Car , вы должны сначала вызвать его конструктор. Оттуда вы можете получить доступ к любому из его доступных свойств.

 val car = Car() // создать автомобиль
val Wheels = car.wheels // получить значение колеса из Car
 

Если вы хотите настроить свои колеса, вы можете определить пользовательский конструктор, который указывает, как инициализируются свойства вашего класса:

 класс Автомобиль(значение колес: Список<Колесо>)
 

В приведенном выше примере конструктор класса принимает List в качестве аргумент конструктора и использует этот аргумент для инициализации своих колес свойство.

Функции класса и инкапсуляция

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

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

 class Car(val Wheels: List) {
    частный val doorLock: DoorLock = ...
    весело разблокировать дверь (ключ: ключ): Boolean {
        // Возвращаем true, если ключ подходит для дверного замка, иначе false
    }
}
 

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

 класс Автомобиль (вал колеса: Список <Колесо>) {
 частный val doorLock: DoorLock = .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *