Перейти к содержимому
LeshaInc

[Pure Lua] [OOP] LuaInteger (разные системы счисления)

Рекомендуемые сообщения

6iW2aEo.png
 
§
">topart LuaInteger library
Библиотека для работы с разными системами счисления на чистом Lua.
 
§">toc Содержание:

  • §">toc Содержание
  • §">about Описание
  • §">doc Документация
    • §">todec toDec
    • §">fromdec fromDec
    • §">custominteger CustomInteger
      • §">customintegerto :to
    • §">hexinteger HexInteger
    • §">octinteger OctInteger
    • §">bininteger BinInteger
    • §">decinteger DecInteger
  • §">get Скачать

§">about Описание:
Однажды @qwertyMAN написал библиотеку для работы с числами. Функции она предоставляла довольно нужные, но возможности у нее никакие - нельзя работать с нашими числами (умножать, вычитать, делить, сравнивать и т.д.), да и ООП там никакого и не было. Поэтому я решил написать свою библиотеку с блэкдж.... ООП и арифметикой.
 
§">doc Документация:

  • §">todec toDec(number: number, number: base) - number: result - переводит одну систему счисления в десятичную. Принимает число, которое будут переводить (обязательно в виде строки, например "FFFFFF") и основание системы счисления из которой переводят (например 16).
    Пример: 
    print(int.toDec("F", 16)) -- 15
    
  • §">fromdec fromDec(number: number, number: base) - string: result - переводит десятичную систему счисления в другую с основанием base (например 16).
    Пример:
    print(int.fromDec(15, 16)) -- F
    
  • §">custominteger class CustomInteger(string: number, number: base) - CustomInteger instance - класс системы счисления. Принимает число в виде строки, и его основание. С объектом мы можем делать любые действия (+, -, /, *, %, ==, >, <, >=, <=, ^)
    • §">customintegerto :to(number: base) - string: result - переводит наш объект в другую систему счисления.
      Пример:
      a = CustomInteger("F", 16)
      print(a:to(10)) -- 15
      
  • §">hexinteger class HexInteger(string: number) - HexInteger instance - ссылка на CustomInteger с основанием 16
  • §">octinteger class OctInteger(string: number) - OctInteger instance - ссылка на CustomInteger с основанием 8
  • §">bininteger class BinInteger(string: number) - BinInteger instance - ссылка на CustomInteger с основанием 2
  • §">decinteger class DecInteger(string: number) - DecInteger instance - ссылка на CustomInteger с основанием 10

§">get Скачать:

Ссылка на скачивание: http://pastebin.com/yg487hJ9

Библиотека написана на moonscript,  поэтому если вы хотите получить moon исходник, напишите мне в личку.

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В чём смысл вычислений в разных системах счисления, если это по сути одно и тоже? Не понимаю, зачем здесь ООП. В остальном функционал не прибавился.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В чём смысл вычислений в разных системах счисления, если это по сути одно и тоже? Не понимаю, зачем здесь ООП. В остальном функционал не прибавился.

  • А зачем тогда человечество сделало разные системы счисления? Ведь вычисления те же самые? :facepalm:
  • Без ооп не получить удобных вычислений, таких как a + b, пришлось бы делать что-то вроде

    a = toDec("FF", 16) b = toDec("73", 8) print(fromDec(a + b, 8))
    Ну а теперь сам посуди, что выглядит лучше, первое или второе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Думаю на практике, библиотеку можно свести к функции convert(value: number, to: number). Который будет изредка юзаться для конвертации и вывода результата вычислений в какую-нибудь нужную систему.

Ибо какая к черту разница как оно там под капотом хранится. Конструкция из строк и таблиц не будет эффективнее примитивного типа number.

 

С точки зрения же получения удовольствия от написания программы, игры с системами счисления, таблицами и языком Луа - вопросов нет, дело хорошее =)

 

P.S. Гигантскую таблицу в начале можно генерить налету с помощью string.byte и string.char

P.P.S. В доках, лучше вначале писать название переменной, а потом, через двоеточие, тип. Такой стиль используется в большинстве документов. И конструкции типа class DecInteger(string: number) - DecInteger instance изрядно путают. Это строка с названием number или число с названием string?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Думаю на практике, библиотеку можно свести к функции convert(value: number, to: number). Который будет изредка юзаться для конвертации и вывода результата вычислений в какую-нибудь нужную систему.

Ибо какая к черту разница как оно там под капотом хранится. Конструкция из строк и таблиц не будет эффективнее примитивного типа number.

 

С точки зрения же получения удовольствия от написания программы, игры с системами счисления, таблицами и языком Луа - вопросов нет, дело хорошее =)

 

Я писал просто так, а не для того чтобы думать о дальнейшем использовании, упрощении, фигне какой то, или еще о чем то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В чём смысл вычислений в разных системах счисления, если это по сути одно и тоже? Не понимаю, зачем здесь ООП. В остальном функционал не прибавился.

Это всё ради лайков ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну а теперь сам посуди, что выглядит лучше, первое или второе?

a = CustomInteger("FF", 16) b  = CustomInteger("73", 8) print((a + b):to(8))

Вот второе. Это второе пишется немного дольше, вводит бессмысленный объект "CustomInteger", да и вычисляет немного дольше. А главное не понятно зачем это. В Lua уже существуют числа, а вопросом, как их считать и отобразить, должна была заниматься твоя библиотека. Также интересно, что мне делать с этой конструкцией:

for i = 0, CustomInteger("KTLO", 63) do
    print(i) --Интересно...
end

Разумеется я могу переводить каждый раз число в нужную мне СС, используя при этом tonumber(), ведь у тебя нет соответствующего метода, но не лучше ли мне использовать стандартный тип? Чем постоянно его конвертировать? Но это не самое весёлое...

 

А зачем тогда человечество сделало разные системы счисления? Ведь вычисления те же самые? :facepalm:

 


Надо бы ответить тем же: :facepalm:. Не знаю будет ли это новостью, но 16+15 == 0x10 + 0xF, к примеру. При чём числа в компьютере хранятся в двоичном виде. Это одна из причин существования разных СС, остальные сам додумай. Сразу открою секрет, почему люди пользуются в основном десятичной СС:

Потому что у человека 10 пальцев :smile44:

 

Изменено пользователем Ktlo

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

instance of Гадить(0xFFA71AB)

 

 

Хочу посмотреть как ты без всяких либ будешь считать что то типо такого:

FF0A116 * 71838 + 2215 - (8310 ^ LOX36)

 

P.S. Хватит гадить в теме. Не нравится - не лезь, обойди стороной. Например, Васе необходима такая либа. Он нашел ее, зашел и попал автоматический к твоему посту, где видит как ты всяческий обливаешь радужными какашками либу. После этого, наш Вася пойдет писать свою либу, которая будет делать то же самое. +1 велик.

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хочу посмотреть как ты без всяких либ будешь считать что то типо такого:

[il]FF0A116 * 71838 + 2215 - (8310 ^ LOX36)

Это не отменяет того факта, что без ООП это будет сделать проще, и быстрее в последствии будет вычисляться. Также интересно, где мне потребуется использовать столько нетипичных СС вместе, но спор был не об этом.

 

P.S. Хватит гадить в теме.

Ну я же по теме, просто получается, что "+1 велик", написал ты.

 

P.S. Всё ухожу.

Изменено пользователем Ktlo

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну я же по теме, просто получается, что "+1 велик", написал ты.

 

Бывает гадят по теме. Велик? Пруф.

proof.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пруф

Я про ту библиотеку @qwertyMAN'а, которую ты упомянул в самом начале.

Изменено пользователем Ktlo

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я про ту библиотеку @qwertyMAN'а, которую ты упомянул в самом начале.

 

Там нет ООП и арифметики.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я про ту библиотеку @qwertyMAN'а, которую ты упомянул в самом начале.

Я не против великов. Пусть будет 2 версии, с ООП и без.

 

А то что арифметика добавлена в новой библиотеке, то я думаю никто не станет юзать эту возможность. Просто не представляю в каких случаях это может понадобится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Там нет ООП и арифметики.

Ты меня не понял, я имел в виду, что без ООП это то же, что и либа qwertyMen, о чём и писал ещё в начале темы. А про арифметику я писал дальше, что стандартный тип Lua, число, и так может вычисляться. И будет делать это быстрее, нежели в твоей библиотеке с помощью ООП. Также с числами Lua можно делать множество других сложных конструкций, из-за чего с ними взаимодействовать удобнее, о чём я тоже писал выше.

 

P.S. Мне этот спор начинает надоедать, особенно, когда надо напоминать, о чём писал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тему не читал, код не смотрел.

Лайк за красиво оформленный первый пост. Все бы так!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...