LeshaInc 625 Опубликовано: 17 января, 2016 (изменено) §">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 исходник, напишите мне в личку. Изменено 17 января, 2016 пользователем LeshaInc 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 17 января, 2016 В чём смысл вычислений в разных системах счисления, если это по сути одно и тоже? Не понимаю, зачем здесь ООП. В остальном функционал не прибавился. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc Автор темы 625 Опубликовано: 17 января, 2016 В чём смысл вычислений в разных системах счисления, если это по сути одно и тоже? Не понимаю, зачем здесь ООП. В остальном функционал не прибавился. А зачем тогда человечество сделало разные системы счисления? Ведь вычисления те же самые? Без ооп не получить удобных вычислений, таких как a + b, пришлось бы делать что-то вроде a = toDec("FF", 16) b = toDec("73", 8) print(fromDec(a + b, 8))Ну а теперь сам посуди, что выглядит лучше, первое или второе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 17 января, 2016 Думаю на практике, библиотеку можно свести к функции convert(value: number, to: number). Который будет изредка юзаться для конвертации и вывода результата вычислений в какую-нибудь нужную систему. Ибо какая к черту разница как оно там под капотом хранится. Конструкция из строк и таблиц не будет эффективнее примитивного типа number. С точки зрения же получения удовольствия от написания программы, игры с системами счисления, таблицами и языком Луа - вопросов нет, дело хорошее =) P.S. Гигантскую таблицу в начале можно генерить налету с помощью string.byte и string.char P.P.S. В доках, лучше вначале писать название переменной, а потом, через двоеточие, тип. Такой стиль используется в большинстве документов. И конструкции типа class DecInteger(string: number) - DecInteger instance изрядно путают. Это строка с названием number или число с названием string? 6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc Автор темы 625 Опубликовано: 17 января, 2016 Думаю на практике, библиотеку можно свести к функции convert(value: number, to: number). Который будет изредка юзаться для конвертации и вывода результата вычислений в какую-нибудь нужную систему. Ибо какая к черту разница как оно там под капотом хранится. Конструкция из строк и таблиц не будет эффективнее примитивного типа number. С точки зрения же получения удовольствия от написания программы, игры с системами счисления, таблицами и языком Луа - вопросов нет, дело хорошее =) Я писал просто так, а не для того чтобы думать о дальнейшем использовании, упрощении, фигне какой то, или еще о чем то. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 722 Опубликовано: 17 января, 2016 В чём смысл вычислений в разных системах счисления, если это по сути одно и тоже? Не понимаю, зачем здесь ООП. В остальном функционал не прибавился. Это всё ради лайков Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 17 января, 2016 (изменено) Ну а теперь сам посуди, что выглядит лучше, первое или второе? 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(), ведь у тебя нет соответствующего метода, но не лучше ли мне использовать стандартный тип? Чем постоянно его конвертировать? Но это не самое весёлое... А зачем тогда человечество сделало разные системы счисления? Ведь вычисления те же самые? Надо бы ответить тем же: . Не знаю будет ли это новостью, но 16+15 == 0x10 + 0xF, к примеру. При чём числа в компьютере хранятся в двоичном виде. Это одна из причин существования разных СС, остальные сам додумай. Сразу открою секрет, почему люди пользуются в основном десятичной СС: Потому что у человека 10 пальцев Изменено 17 января, 2016 пользователем Ktlo 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc Автор темы 625 Опубликовано: 17 января, 2016 (изменено) instance of Гадить(0xFFA71AB) Хочу посмотреть как ты без всяких либ будешь считать что то типо такого: FF0A116 * 71838 + 2215 - (8310 ^ LOX36) P.S. Хватит гадить в теме. Не нравится - не лезь, обойди стороной. Например, Васе необходима такая либа. Он нашел ее, зашел и попал автоматический к твоему посту, где видит как ты всяческий обливаешь радужными какашками либу. После этого, наш Вася пойдет писать свою либу, которая будет делать то же самое. +1 велик. Изменено 17 января, 2016 пользователем LeshaInc 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 17 января, 2016 (изменено) Хочу посмотреть как ты без всяких либ будешь считать что то типо такого: [il]FF0A116 * 71838 + 2215 - (8310 ^ LOX36) Это не отменяет того факта, что без ООП это будет сделать проще, и быстрее в последствии будет вычисляться. Также интересно, где мне потребуется использовать столько нетипичных СС вместе, но спор был не об этом. P.S. Хватит гадить в теме. Ну я же по теме, просто получается, что "+1 велик", написал ты. P.S. Всё ухожу. Изменено 17 января, 2016 пользователем Ktlo 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc Автор темы 625 Опубликовано: 17 января, 2016 Ну я же по теме, просто получается, что "+1 велик", написал ты. Бывает гадят по теме. Велик? Пруф. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 17 января, 2016 (изменено) Пруф Я про ту библиотеку @qwertyMAN'а, которую ты упомянул в самом начале. Изменено 17 января, 2016 пользователем Ktlo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc Автор темы 625 Опубликовано: 17 января, 2016 Я про ту библиотеку @qwertyMAN'а, которую ты упомянул в самом начале. Там нет ООП и арифметики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 722 Опубликовано: 17 января, 2016 Я про ту библиотеку @qwertyMAN'а, которую ты упомянул в самом начале. Я не против великов. Пусть будет 2 версии, с ООП и без. А то что арифметика добавлена в новой библиотеке, то я думаю никто не станет юзать эту возможность. Просто не представляю в каких случаях это может понадобится. 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 17 января, 2016 Там нет ООП и арифметики. Ты меня не понял, я имел в виду, что без ООП это то же, что и либа qwertyMen, о чём и писал ещё в начале темы. А про арифметику я писал дальше, что стандартный тип Lua, число, и так может вычисляться. И будет делать это быстрее, нежели в твоей библиотеке с помощью ООП. Также с числами Lua можно делать множество других сложных конструкций, из-за чего с ними взаимодействовать удобнее, о чём я тоже писал выше. P.S. Мне этот спор начинает надоедать, особенно, когда надо напоминать, о чём писал. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy 1 169 Опубликовано: 17 января, 2016 Тему не читал, код не смотрел. Лайк за красиво оформленный первый пост. Все бы так! 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах