силу возраста, не работаю ещё, но работаю над pet-проектами
главное не объём, а качество. Ты-ж не индус, которому платят за количество строк, ей богу 😁
у меня просто за 7 часов выходит ±200 строк (отношение кода к тестам 4:5 примерно). это нормально, или мало?
я не только про луа, а в целом
давно код пишешь? И как часто?
три года, стартовал с питонов. за первый год написал игру "города", 7к строк и 2к захардкоженных названий городов. потом вебразработка, цсс и гипертекст. рест апи, базы данных, скуэль. постгрес, майскуэль и скулайт (постгрес лучший). параллельно изучал линукс. сейчас у меня сборка на арче (arch btw). bash знаю неплохо, мне хватает (плохо знаю всякие там программы, которые не входят в bash, но используются (awk-grep-rev-прочее) как-то писал плагин на vimscript. вимскрипт - днище. вспоминать про него больно. тогда первый раз услышал про луа. записал себе в планы далее, разработка ботов для discord и telegram. скучно. решил изучить bf, за 4 дня сделал проект на 2к строк (бойлерплейт, вестимо). никак не дойдут руки написать к нему обёртку на баше. далее, прочитал гайд по луа и пришёл сюда (месяц назад). сделал свой модуль, если кратко - завозит всякие функции для работы со строками (типо сплит и пр.) из питона, и функции для покраски вывода stdin с помощью ascii-sequences. он мне нужен, т.к. я буду свой говнокод 1-2 лет переписывать на луа. я тогда сделал много консольных игр первые два года ходил в яндекс лицей. второй год отстой, а за первый нехило знакомишься с алгоритмами. как закончил лицей, регулярно решаю задачи на codewars, чтобы в форме оставаться (если время есть. у нас в школе бальная система, учиться сложно. я на медаль иду). 5 kui в планах: иду в ассемблер, потом си, потом плюсы. хочу попробовать писать малварь, а для этого нужен ассемблер. а плюсы в университете нужны будут
ты ни разу не работал что ли оффициально ?
> завозит всякие функции для работы со строками (типо сплит и пр.) из питона не думаю, что это хорошая практика. Тебе стоит привыкнуть к стандартным либам и функциям сперва (в этом есть плюс, хотя-бы потому, что luajit лучше будет оптимизироать библиотечные, нежели самописные функции, да и вообще меньше оверхеда) > иду в ассемблер, потом си, потом плюсы уверен, что тебе это надо?
я в 10й класс иду. нет
а ну , начнешь работать вопрос закроется сам собой
в моём городе нет вакансий на питоне, а на плюсах есть. не уверен. но я точно не буду учить js и не стану фронтендером. это не моё
разве есть аналог сплита в стдлибе? или, например, функция, которая определяет, есть ли элемент в массиве. это просто удобнее, чем самим каждый раз цикл писать
странно, обычно наоборот. Может плохо искал? 😁 да и ты, как программист, не сильно ограничен выбором места работы, можно и по удалёнке, скорее всего, если поискать.
напомни что делает split
* я искал вакансии без опыта, и полная занятость (без удалёнки) кмк, если первое место работы, то не удалённо
function mfr.split(str, separator) assert(type(str) == "string", "str argument is string") separator = separator or " " assert(type(separator) == "string", "separator argument must be string") local result, buffer, inside_separator, sep_len = {}, "", 0, separator:len() for i = 1, #str do if inside_separator == 0 then if str:sub(i, i + sep_len - 1) ~= separator then buffer = buffer .. str:sub(i, i) else table.insert(result, buffer) inside_separator, buffer = sep_len - 1, "" end else inside_separator = inside_separator - 1 end end if buffer ~= "" then table.insert(result, buffer) end return result end
берёт строку и разделитель. возвращает массив строк: оригинальная строка, распиленная по разделителям
можно сделать проще, через string.match()
если нужно, тут тоже можно сделать добавление в таблицу, её возвращать... Но, имхо, проще написать цикл с gsub. Главное не переусложнять вещи 😁 легче будет и интерпретатору, и тебе
да, так намного лучше...
в reference manual есть хорошая дока по шаблонам. Надо немного потренироваться, и они станут твоим незаменимым инструментом для решения задлач со строками 😁
та не за что 😄
function mfr.belongs(element, sequence) assert(type(sequence) == "table", "sequence is table") for i = 1, #sequence do if element == sequence[i] then return true end end return false end для такого есть что-то в стдлибе?
увы нет, но на это есть причина. первая - для отсортированных/не отсортированных и ещё кучи разных массивов есть разные более быстрые способы поиска. Покрыть много ситуаций - сложно. вторая - если значения уникальны, делай обратную таблицу, куда пиши [значение]=индекс. Для поиска просто индексируй эту обратную таблицу, так получишь индекс. Это достаточно быстрый способ что-то найти, если этого чего-то много. Размен памяти на производительность, своего рода 😁 Для небольших-же массивов, хватит и функции, приведённой тобой
ну и в assert поправь сообщение на NOT A table 😁
так и задумано: вместо "параметр н должен быть у" "параметр н - это у". да, задумка не очень. у меня 20 с лишним ассртов на типы в 1 файле, и везде такой шаблон 😔 я наверное конструктор сделаю для assert messages, чтобы более информативно было
можно спросить кое-что? у меня есть длинная строка кода (больше 80-100 символов). чтобы сделать её короче, я строкой выше объявляю переменную, где храню все параметры для функции, которую вызываю ниже. и вызываю функцию с 1 параметром. читаемость заметно лучше, но есть лишняя переменная. заметил, что так никто не делает. я же всегда стараюсь, чтобы длинна строки не была больше 80 символов (у меня хард врап в виме стоит, и в вскоде похожая штука) правильно ли? или не стоит заморачиваться над оформлением так, как это требуют в питоне?
только учти, что этот конструктор будет вызываться даже, если assert не сработает. а вообще, ассерты нужны не сильно часто. Сам код выдаст ошибку, если что-то будет не так. Менее понятную, но всё-же. Их хорошо на стадии отладки использовать, а потом понемногу убирать (особенно, если этот код вызывается достаточно часто)
опять же, не только луа
покажи-ка кодом, а то я что-то не понимаю немного
я библиотеку делал, там желательно нормальные ошибки показывать. подход "лишний раз проверь", а не pcall и пр.
https://pastebin.com/n4Cm656z например, я тут tabulation в отдельную переменную вынес, и использовал её только в 1 месте
эта функция из таблицы делает удобочитаемую строку
ааа... То, что кешируешь string.rep() - правильно. это всё ещё си функция, и лишние затраты на её вызов и повторное создание такой-же строки - не очень, хоть и не критично.
если локальная переменная - норм. пока это помогает читабельности - тем более. ванильная луашка в оптимизацию всего этого во время компиляции в байткод - не оч. luajit получше, можно меньше заморачиваться, но всё равно.
понял, спасибо вам. потрогую как нибудь luajit. он не влияет же на синтаксис языка, просто компилятор?
про оптимизацию я имею в виду кеширование результата предыдущих вычислений, если что. Пока это в одном стейтменте, ака 20 + 10 / 3 или "abab".."zazaza" - оптимизирует
немного влияет, он добавляет некоторые фишки из lua 5.2 и 5.3, но не все, на уровне сохранения обратной совместимости с 5.1
у меня 546 луа, луажит добавит что-то, что раньше из языка убрали?
нет. Он поддерживает всё, что было в lua 5.1, добавляет некоторые фишки из новых луашек, но не все. например, в luajit до сих пор только getenv() setenv(), так как это функции из 5.1. Ни о каких local _ENV и речи быть не может
слышал про nelua. он в некоторых тестах быстрее си - вот тут писали https://t.me/ProLua/103259
ну... nelua довольно сильно от ванильной луашки отличается вроде как. Я им никогда не пользовался, luajit, ванильная луашка и luau - максимум 😁 к слову о luau - она бысрее ванильной луашки, там быстрее создание и сборка объектов (только на этом она обгоняет luajit), там есть дополнительные жёсткие оптимизации во время компиляции и выполенния без jit и с сохранением практически полной кроссплатформенности (будет работать везде, куда можно скомпилироввать C++17), но она СОВЕРШЕННО не совместима со всеми луашными либами (как и nelua, как я думаю), и это её главный недостаток. ну и для того, чтобы обеспечить работу оптимизации на этапе компиляции байткода, надо гарантировать неизменяемость _G, что ломает очень много кода, его надо переделывать
можно спросить, а вы по профессии на чём пишете?
та я по профессии вообще не программист 😁 так сишку/плюсы и луашку использую в основном.
си сложный? я как-то пробовал его поучить. взял кёрнигхан / ричи, потом сказали - нехорошее чтиво. пробовал по видеоурокам, сломался на указателях. вернее, пытаюсь своё написать, он ошибками плюётся, гуглю - надо указатель передавать в аргументе... почему, индиец же просто переменную передавал? потом в bf уже допёрло, что это за указатели (весь bf это один большой указатель, который ползает по памяти 🙂)
Обсуждают сегодня