Обкладинка нотатки: Чим відрізняється 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 помилку.
Категорії: Програмування

🔗 Цитувати допис: "Чим відрізняється int та bigint в Ruby? Мінімальні та максимальні значення."

Якщо ви хочете процитувати цей допис у своїй роботі, статті, блозі, використовуйте наведену нижче інформацію.

Розгорнути деталі


🙌 Підтримати блог @memecode

Ви можете поширити цей допис у соцмережах, чим допоможете платформі цейво розвиватись (* ^ ω ^)

📝 Більше публікацій:
Обкладинка нотатки: Чи створює Ruby нову копію об’єкта при присвоєнні змінної змінній?
Обкладинка нотатки: В чому різниця між immediate value та reference у Ruby?
Обкладинка нотатки: Чому Ruby код повертає nil після виконання puts?
Обкладинка нотатки: Яка різниця між nil і false в Ruby?
Обкладинка нотатки: Чому порожній рядок (string) у Ruby не є false?
Обкладинка нотатки: Область видимості локальної змінної в Ruby
Обкладинка нотатки: Що означає помилка 'is out of range' в Ruby on Rails? Range Error - Integer with limit 4 bytes
Обкладинка нотатки: Що таке імутабільність та мутабільність?
Обкладинка нотатки: [Ruby] Що повернеться в результаті складання 10.5 та 10?
Обкладинка нотатки: [Ruby] Чим відрізняються змінні, що починаються з @, @@ та $?
Обкладинка нотатки: Що таке функція в програмуванні?
Обкладинка нотатки: [Фікс] extconf.rb failed під час встановлення Ruby-бібліотеки Gosu
Дисклеймер

Інформація на сайті tseivo.com є суб'єктивною та відображає особисті погляди та досвід авторів та авторок блогів.

Використовуйте цей ресурс як одне з декількох джерел інформації під час своїх досліджень та прийняття рішень. Завжди застосовуйте критичне мислення. Людина сама несе відповідальність за свої рішення та дії.