36 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			36 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: Tuples
							 | 
						|||
| 
								 | 
							
								localeTitle: Кортеж
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								## Кортеж
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								В Elixir кортежи представляют собой структуру данных, которая может содержать любое значение или смесь типов. Кортежи определяются фигурными фигурными скобками, а их индексы начинаются с 0. Поскольку кортежи хранятся смежно в памяти, получение данных из них является очень быстрой операцией.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```elixir
							 | 
						|||
| 
								 | 
							
								iex> tuple = {:atom, "string"} 
							 | 
						|||
| 
								 | 
							
								 {:atom, "string"} 
							 | 
						|||
| 
								 | 
							
								 iex> elem(tuple, 0) 
							 | 
						|||
| 
								 | 
							
								 :atom 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## неизменность
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Кортежи в Elixir неизменяемы, поэтому внесение изменений вернет совершенно новый кортеж - сохранение оригинала в памяти.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```elixir
							 | 
						|||
| 
								 | 
							
								iex> tuple = {:atom, "string"} 
							 | 
						|||
| 
								 | 
							
								 {:atom, "string"} 
							 | 
						|||
| 
								 | 
							
								 iex> put_elem(tuple, 1, true) 
							 | 
						|||
| 
								 | 
							
								 {:atom, true} 
							 | 
						|||
| 
								 | 
							
								 iex> tuple 
							 | 
						|||
| 
								 | 
							
								 {:atom, "string"} 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## Соответствие шаблону
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Наиболее распространенное использование кортежей в Elixir - это возврат функции. Например: `{:ok, "Hello World\n"}` Это очень полезно, так как позволяет использовать Match Matching для обработки этих возвратов.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#### Дополнительная информация:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								*   [elixir-lang.org | рекурсия](https://elixir-lang.org/getting-started/basic-types.html#tuples)
							 | 
						|||
| 
								 | 
							
								*   [hexdocs | Enum](https://hexdocs.pm/elixir/Tuple.html)
							 |