> For the complete documentation index, see [llms.txt](https://ru.gentee.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ru.gentee.org/stdlib/obj.md).

# Объекты

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

* [arr( obj o ) arr.obj](/stdlib/obj.md#arr-obj-o-arr-obj)
* [arrstr( obj o ) arr.str](/stdlib/obj.md#arrstr-obj-o-arr-str)
* [bool( obj o ) bool](/stdlib/obj.md#bool-obj-o-bool)
* [bool( obj o, bool def ) bool](/stdlib/obj.md#bool-obj-o-bool-def-bool)
* [float( obj o ) float](/stdlib/obj.md#float-obj-o-float)
* [float( obj o, float def ) float](/stdlib/obj.md#float-obj-o-float-def-float)
* [int( obj o ) int](/stdlib/obj.md#int-obj-o-int)
* [int( obj o, int def ) int](/stdlib/obj.md#int-obj-o-int-def-int)
* [IsArray( obj o ) bool](/stdlib/obj.md#isarray-obj-o-bool)
* [IsMap( obj o ) bool](/stdlib/obj.md#ismap-obj-o-bool)
* [IsNil( obj o ) bool](/stdlib/obj.md#isnil-obj-o-bool)
* [item( obj o, int i ) obj](/stdlib/obj.md#item-obj-o-int-i-obj)
* [item( obj o, str s ) obj](/stdlib/obj.md#item-obj-o-str-s-obj)
* [map( obj o ) map.obj](/stdlib/obj.md#map-obj-o-map-obj)
* [obj( arr.typename a ) obj](/stdlib/obj.md#obj-arr-typename-a-obj)
* [obj( bool b ) obj](/stdlib/obj.md#obj-bool-b-obj)
* [obj( float f ) obj](/stdlib/obj.md#obj-float-f-obj)
* [obj( int i ) obj](/stdlib/obj.md#obj-int-i-obj)
* [obj( map.typename m ) obj](/stdlib/obj.md#obj-map-typename-m-obj)
* [obj( str s ) obj](/stdlib/obj.md#obj-str-s-obj)
* [Sort( arr.obj o, cmpobjfunc cmpfunc ) arr.obj](/stdlib/obj.md#sort-arr-obj-o-cmpobjfunc-cmpfunc-arr-obj)
* [str( obj o ) str](/stdlib/obj.md#str-obj-o-str)
* [str( obj o, str def ) str](/stdlib/obj.md#str-obj-o-str-def-str)
* [Type( obj o ) str](/stdlib/obj.md#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**.
