# Объекты

Тип **obj** служит для хранения значений следующих типов - **int, bool, float, str, arr.obj, map.obj**. Если объекту не присвоено никакое значение, то он равен **nil**. Объекту можно присваивать значения типа, который отличается от текущего.\
Здесь описаны операторы и функции для работы с объектами.

* [arr( obj o ) arr.obj](#arr-obj-o-arr-obj)
* [arrstr( obj o ) arr.str](#arrstr-obj-o-arr-str)
* [bool( obj o ) bool](#bool-obj-o-bool)
* [bool( obj o, bool def ) bool](#bool-obj-o-bool-def-bool)
* [float( obj o ) float](#float-obj-o-float)
* [float( obj o, float def ) float](#float-obj-o-float-def-float)
* [int( obj o ) int](#int-obj-o-int)
* [int( obj o, int def ) int](#int-obj-o-int-def-int)
* [IsArray( obj o ) bool](#isarray-obj-o-bool)
* [IsMap( obj o ) bool](#ismap-obj-o-bool)
* [IsNil( obj o ) bool](#isnil-obj-o-bool)
* [item( obj o, int i ) obj](#item-obj-o-int-i-obj)
* [item( obj o, str s ) obj](#item-obj-o-str-s-obj)
* [map( obj o ) map.obj](#map-obj-o-map-obj)
* [obj( arr.typename a ) obj](#obj-arr-typename-a-obj)
* [obj( bool b ) obj](#obj-bool-b-obj)
* [obj( float f ) obj](#obj-float-f-obj)
* [obj( int i ) obj](#obj-int-i-obj)
* [obj( map.typename m ) obj](#obj-map-typename-m-obj)
* [obj( str s ) obj](#obj-str-s-obj)
* [Sort( arr.obj o, cmpobjfunc cmpfunc ) arr.obj](#sort-arr-obj-o-cmpobjfunc-cmpfunc-arr-obj)
* [str( obj o ) str](#str-obj-o-str)
* [str( obj o, str def ) str](#str-obj-o-str-def-str)
* [Type( obj o ) str](#type-obj-o-str)

## Типы

### fn cmpobjfunc(obj, obj) int

Тип функций **cmpobjtype** служит для сравнения двух объектов. Функции этого типа используются для сортировки объектов в массиве.

## Операторы

| Оператор                 | Результат | Описание                                                                                                                          |
| ------------------------ | --------- | --------------------------------------------------------------------------------------------------------------------------------- |
| \*obj                    | int       | Если объект является *arr.obj* или *map.obj*, то возвращается количество элементов в массиве. В противном случае, возвращается 0. |
| obj **?**                | bool      | Вызов *bool(obj)*.                                                                                                                |
| obj **=** arr.typename   | obj       | Присваивание массива объекту.                                                                                                     |
| obj **=** bool           | obj       | Присваивание логического значения объекту.                                                                                        |
| obj **=** float          | obj       | Присваивание десятичного числа объекту.                                                                                           |
| obj **=** int            | obj       | Присваивание числа объекту.                                                                                                       |
| obj **=** map.typename   | obj       | Присваивание ассоциативного массива объекту.                                                                                      |
| obj **=** obj            | obj       | Присваивание объектов.                                                                                                            |
| obj **=** str            | obj       | Присваивание строки объекту.                                                                                                      |
| obj **+=** obj           | obj       | Добавление объекта к массиву объектов.                                                                                            |
| obj **&=** obj           | obj       | Создать клон объекта. Новая переменная будет работать с тем же набором данных.                                                    |
| obj **\[** int/str **]** | obj       | Присвоить/получить значение массива по индексу. Если объект не является *arr.obj* или *map.obj*, то возвращается ошибка.          |

## Функции

### arr(obj o) arr.obj

Функция *arr* возвращает массив объектов. Объект *o* должен быть массивом, в противном случае возвращается ошибка. При вызове функции не создается нового массива, а возвращается текущий массив, который содержит объект *o*.

### arrstr(obj o) arr.str

Функция *arrstr* конвертирует массив объектов в массив строк. Объект *o* должен быть массивом, в противном случае возвращается ошибка. Функция возвращает полученный массив строк.

### bool(obj o) bool

Функция *bool* возвращает логическое значение текущего типа. Например, если объект содержит строку, то возвращается результат вызова *bool(str)*. Если объект не определен, то возвращается ошибка.

### bool(obj o, bool def) bool

Функция *bool* возвращает логическое значение текущего типа. Если объект не определен, то возвращается второй параметр.

### float(obj o) float

Функция *float* конвертирует объект в действительное число. Объект должен содержать значение типа **str, int, float**, в противном случае, возвращается ошибка.

### float(obj o, float def) float

Функция *float* конвертирует объект в действительное число. Если объект не определен, то возвращается второй параметр.

### int(obj o) int

Функция *int* конвертирует объект в целое число. Объект должен содержать значение типа **str, int, float, bool**, в противном случае, возвращается ошибка.

### int(obj o, int def) int

Функция *int* конвертирует объект в целое число. Если объект не определен, то возвращается второй параметр.

### IsArray(obj o) bool

Функция *IsArray* возвращает *true*, если объект является массивом. В противном случае, функция возвращает *false*.

### IsMap(obj o) bool

Функция *IsMap* возвращает *true*, если объект является ассоциативным массивом (map). В противном случае, функция возвращает *false*.

### IsNil(obj o) bool

Функция *IsNil* возвращает *true*, если объект не определен (равен **nil**). В противном случае, функция возвращает *false*.

### item(obj o, int i) obj

Функция *item* возвращает i-й элемент объекта. Объект должен иметь тип **arr.obj**. Если элемент отсутствует, то возвращается пустой объект.

### item(obj o, str s) obj

Функция *item* возвращает значение ключа **s**. Объект должен иметь тип **map.obj**. Если элемент отсутствует, то возвращается пустой объект.

### map(obj o) map.obj

Функция *map* возвращает ассоциативный массив объектов. Объект *o* должен быть ассоциативным массивом (map), в противном случае возвращается ошибка. При вызове функции не создается нового массива, а возвращается текущий *map*, который содержит объект *o*.

### obj(arr.typename a) obj

Функция *obj* конвертирует массив типа *arr* в объект.

### obj(bool b) obj

Функция *obj* создает объект с указанными логическим значением.

### obj(float f) obj

Функция *obj* создает объект с указанными **float** значением.

### obj(int i) obj

Функция *obj* создает объект с указанными **int** значением.

### obj(map.typename m) obj

Функция *obj* конвертирует ассоциативный массив типа *map* в объект.

### obj(str s) obj

Функция *obj* создает объект с указанными **str** значением.

### Sort(arr.obj o, cmpobjfunc cmpfunc) arr.obj

Функция *Sort* сортирует массив объектов и возвращает его. Сортировка происходит с помощью функции типа **cmpobjfunc**.

```go
func mySort(obj left, obj right) int {
  if str(left) < str(right) : return -1
  if str(left) > str(right) : return 1
  return 0
}

run str {
  arr a = {"qwr","7","10","ab","тест","абв", "ka"}
  obj o = a
  Sort( arr(o), &mySort.cmpobjfunc )
  ...
}
```

### str(obj o) str

Функция *str* преобразует объект в строку и возвращает её.

### str(obj o, str def) str

Функция *str* преобразует объект в строку и возвращает её. Если объект не определен, то возвращается второй параметр.

### Type(obj o) str

Функция *Type* возвращает тип значения указанного объекта. Могут возвращаться следующие типы: **int, bool, float, str, arr.obj, map.obj**. Если объект не определен, то возвращается **nil**.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ru.gentee.org/stdlib/obj.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
