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

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

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

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

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

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

📝 Більше публікацій: