ГоловнаВсі публікаціїКатегоріїПро проєкт

Чим відрізняється int та bigint в Ruby? Мінімальні та максимальні значення.

Обкладинка нотатки: Чим відрізняється int та bigint в Ruby? Мінімальні та максимальні значення.
Зміст дописунатисність на посилання, щоб перейти до потрібного місця
У Ruby існує лише один тип цілих чисел — Integer. У попередніх версіях Ruby були окремі класи для цілих чисел різних розмірів, такі як Fixnum для малих цілих чисел і Bignum для великих цілих чисел. Починаючи з версії Ruby 2.4, ці класи були об'єднані в єдиний клас Integer.
У Ruby немає поділу на int та bigint, як у базах даних. Єдиний клас Integer може представляти як малі, так і великі цілі числа. Ця особливість дозволяє Ruby без проблем працювати з будь-якими цілими числами, незалежно від їх розміру.
13.class
=> Integer

9223372036854775808.class
=> Integer
Однак, у контексті баз даних, таких як PostgreSQL, ми часто зустрічаємо типи даних int та bigint, які представляють собою 32-бітові та 64-бітові цілі числа відповідно. У Ruby ми можемо працювати з будь-яким з цих типів даних, але необхідно розуміти, як вони відрізняються в базі даних та як Ruby поводиться з великими числами.

Різниця між int та bigint

Якщо спростити - bigint може мати більше максимально ціле число. Тобто якщо пхати занадто велике число в int - ми отримаємо помилку. Для цього нам потрібен тип даних, який може приймати більше значення. Це корисно в контексті великих баз даних. Якщо ви знаєте що база буде велика - використовуйте bigint. Інакше в якийсь момент вам доведеться писати міграції з int у bigint (технічний борг буде накопичуватись, цього можно уникнути, знаючи приблизний / потенційний масштаб бази даних).

Мінімальні та максимальні значення int та bigint

Окєй. Давайте порахуємо максимальні числа, які можуть мати int та bigint:
# Мінімальне і максимальне значення для int (32-бітове ціле число)
min_int = -2**31
max_int = 2**31 - 1
puts "Min int: #{min_int}, Max int: #{max_int}"
Min int: -2147483648, Max int: 2147483647
# Мінімальне і максимальне значення для bigint (64-бітове ціле число)
min_bigint = -2**63
max_bigint = 2**63 - 1
puts "Min bigint: #{min_bigint}, Max bigint: #{max_bigint}"
Min bigint: -9223372036854775808, Max bigint: 9223372036854775807
Якщо додавати більше або менше число за ці діапазони - ми отримаємо помилку SQL:
ERROR:  integer out of range # для int
ERROR:  bigint out of range  # для bigint
Якщо пробувати зберегти значення через Rails апку - ви побачите ActiveRecord помилку.
Чи створює Ruby нову копію об’єкта при присвоєнні змінної змінній?
29.05.2024 09:30

Чи створює Ruby нову копію об’єкта при присвоєнні змінної змінній?

meme code
meme code@memecode
В чому різниця між immediate value та reference у Ruby?
29.05.2024 12:00

В чому різниця між immediate value та reference у Ruby?

meme code
meme code@memecode
Чому Ruby код повертає nil після виконання puts?
29.05.2024 20:30

Чому Ruby код повертає nil після виконання puts?

meme code
meme code@memecode
Яка різниця між nil і false в Ruby?
29.05.2024 20:59

Яка різниця між nil і false в Ruby?

meme code
meme code@memecode
Чому порожній рядок (string) у Ruby не є false?
31.05.2024 14:39

Чому порожній рядок (string) у Ruby не є false?

meme code
meme code@memecode
Область видимості локальної змінної в Ruby
03.06.2024 16:46

Область видимості локальної змінної в Ruby

meme code
meme code@memecode
Що означає помилка 'is out of range' в Ruby on Rails? Range Error - Integer with limit 4 bytes
13.06.2024 07:18

Що означає помилка 'is out of range' в Ruby on Rails? Range Error - Integer with limit 4 bytes

meme code
meme code@memecode
Що таке імутабільність та мутабільність?
19.06.2024 07:48

Що таке імутабільність та мутабільність?

meme code
meme code@memecode
[Ruby] Що повернеться в результаті складання 10.5 та 10?
23.06.2024 13:23

[Ruby] Що повернеться в результаті складання 10.5 та 10?

meme code
meme code@memecode
[Ruby] Чим відрізняються змінні, що починаються з @, @@ та $?
23.06.2024 14:00

[Ruby] Чим відрізняються змінні, що починаються з @, @@ та $?

meme code
meme code@memecode
Що таке функція в програмуванні?
24.06.2024 18:15

Що таке функція в програмуванні?

meme code
meme code@memecode
[Фікс] extconf.rb failed під час встановлення Ruby-бібліотеки Gosu
27.06.2024 16:38

[Фікс] extconf.rb failed під час встановлення Ruby-бібліотеки Gosu

meme code
meme code@memecode