LINUX.ORG.RU

Ответ на: комментарий от Shadow

Вместо left-pad есть теперь строковая стандартная билиотека?

Чтобы сделать str + " ".repeat(n) тебе нужна специальная функция в библиотеке?
Иначе ты вот такое говно вместо этого будешь ваять?

module.exports = leftpad;
function leftpad (str, len, ch) {
  str = String(str);
  var i = -1;
  if (!ch && ch !== 0) ch = ' ';
  len = len - str.length;
  while (++i < len) {
    str = ch + str;
  }
  return str;
}

crutch_master ★★★★★
()
Ответ на: комментарий от menangen

Давай теперь придумай кейс, где нужно делать s[1::2] и расскажи, как ты в этом куске

s = "Hello, darling! How are you?"
s[:7] + "Василий" + s[14:]
Будешь искать 7, 14 в общем случае и зачем это не нужно.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от wandrien

Я вообще только что узнал, что этот left-pad есть и охренел от гениальности.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Похоже на отрыжку Васика.

Там была такая работа со строками от общей безблагодатности языка. Только строки еще и мутабельные были. Это имело хоть какой-то смысл.

А там она взялась в свою очередь из Фортрана. (??? вот тут могу ошибаться.)

В общем, идеологически Питон – это Васик нашего времени.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 2)
Ответ на: комментарий от bread

Да вот тоже не очень понятно как там жить без npm?

Вот ты пишешь, например, на луа, как ты живешь без гитхаба? Никто не заставляет тебя целый день ходить по гитхабу, собирать целый мешок проектов на луа, а потом сливать всё это добро в твой код? Да, npm - это помойка. Там есть дебилы, которые тащат себе (и всем) говно типа left-pad, прочие мегамодули из одной строчки и подставляют жопу для атаки на цепочку поставок. Если собрался рыться в помойке смотри, что ты оттуда достаёшь.

crutch_master ★★★★★
()
Ответ на: комментарий от wandrien

Похоже на отрыжку Васика.

Я думаю никакой божественной работы со строками мне в очередной раз не покажут. Фанбои как всегда, сначала орут про идеальность их поделок, а на деле там сперва были просто не такие названия методов, а теперь substring в индексе и срезы по n символов, которые нужны практически никогда.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от menangen

Да всё правильно ты говоришь, без внешних либ js - 0

И много ты назовёшь язычком, на которых делают пром. системы без внешних либ?

Python, Ruby, спроектированы для удобства работы «из коробки» с большинством типичных задач.

Ага. Поэтому в пистон тащат сразу этот ваш flask, numpy, pandas, etc, а для руби существует rubygems. Изкаробки/10.

Как пример - обработка строк

Вы с Фернаносом уже обосрались со строками, так и не приведя никаких инструментов отличных от дефолта.

В то время как без TypeScript ни один серьёзный проект на бекенде не начинают

На динамических язычках вообще не делают типичных для типизированных языков огромных проектов в принципе, если ты не заметил. Для фронта в вебчике такие проекты вынужденны делать.

crutch_master ★★★★★
()
Ответ на: комментарий от bread

Ну а как ты живешь на луа? Там тоже нихрена нет. Что из хост-приложения прокинул, то и будет.

Я пытался писать логику приложения на луа, оставив коду на си только роль низкоуровнего фреймворка. Но извините… массивы с единицы по дефолту, йаниасилел. Брр. Так что я луа только в качестве калькулятора использую.

А вот с js можно попробовать второй подход к снаряду.

wandrien ★★
()
Ответ на: комментарий от crutch_master

Вы с Фернаносом уже обосрались со строками, так и не приведя никаких инструментов отличных от дефолта

Не надо ляля, я тебе привел пример, где питон уделывает js по работе со строками, а ты заныл, что это не нужно и прочий бред, лови ещё

print( 'The Hilton'.istitle() ) #=> True
print( 'The dog'.istitle() ) #=> False
print( 'sticky rice'.istitle() ) #=> False

'80000'.isnumeric() #=> True
menangen ★★★★★
()
Ответ на: комментарий от crutch_master

И много ты назовёшь язычком, на которых делают пром. системы без внешних либ?

Мы сейчас про возможности языков из коробки, стандартной либы. А если начать приплетать всякие npm, то нужно учитывать, что на сабже от беллара нет npm и не будет. У питона с pip тоже полно софта на любой вкус

menangen ★★★★★
()
Ответ на: комментарий от crutch_master

Я думаю никакой божественной работы со строками мне в очередной раз не покажут

А тебе что не покажи - у тебя один аргумент: «нет, это не так»

  • Красный цвет красный?
  • Нет, это не так, он не красный, он вишневый

Вот твой уровень

menangen ★★★★★
()
Ответ на: комментарий от crutch_master

Давай теперь придумай кейс, где нужно делать s[1::2]

Слайсы я привел для примера, недаром гугл утащил их в гоу, как и в их исходниках на питоне я постоянно вижу работу со слайсами, так что ты просто не в теме (и явно не писал) как это упрощает обработку строк на естественном языке, работу с HTML, JSON, XML и прочего

print("hello world"[::-1])  # dlrow olleh
menangen ★★★★★
()
Последнее исправление: menangen (всего исправлений: 1)

Так вот, оказывается, к чему была тема про LUA )

Таки нормальный практический интерес ).

А щёки-то были: «тем ремесло отличается от исследования» )

Вы помните там тему про решетку? Про размер таблицы? Вы случайно не исследовали исходники lua на предмет почему 5.4 намного быстрее чем 5.3 обрабатывает этот OP_LEN?

Toxo2 ★★★
()
Ответ на: комментарий от menangen

print( ‘The Hilton’.istitle() )

Работает только для английского. Нарпример, в русском заголовки не пишутся каждое слово с большой буквы. Зачем мне эти костыли? Я даже не представляю, зачем это может потребоваться. Абсолютно из пальца высосанная функция.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от menangen

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/substring

Очень похоже, что фанбои бидона находятся под эффектом жёсткого утиного синдрома «у вас там функции называются не так как у нас!!!111».

В теме уже двое отметились.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от wandrien

Ну, в питончике хотя бы строгая типизация и нельзя сложить строку и число без явного приведения типов

'Ten' + 10 #=> TypeError
true + false => 1
'1' + 1 = '11'

!!'false' ==  !!'true'  // -> true
!!'false' === !!'true' // -> true

true == 'true'    // -> true
false == 'false'  // -> false

'foo' + + 'bar' // -> 'fooNaN'
[null] == ''    // true

И там такой херни полно

menangen ★★★★★
()
Последнее исправление: menangen (всего исправлений: 1)
Ответ на: комментарий от menangen
qjs > "   Превед, menangen    ".trimLeft()
"Превед, menangen    "
qjs > "   Превед, menangen    ".trimRight()
"   Превед, menangen"
qjs > 

УМВР. ЧЯДНТ?

wandrien ★★
()
Ответ на: комментарий от menangen

Прикольные WTF-ы. Самое то триггерить неадекватов. На практике представляет проблему примерно никогда.

wandrien ★★
()
Ответ на: комментарий от menangen

Так а что он тебе не так сказал?

Ты пришел в тред про JS с агрессивным настроем и целью устроить холивар. Мы тебе подыгрываем как умеем. Или ты думал, что все сразу согласятся: «Какой же menangen умный, и как мы сразу не догадались взять питон!»?

Еще и подставился с этими строками, хотя речь про строки вообще шла в контексте sh. Давай-ка вспомним, как говнокоды на питоне падают при встрече с utf8 in the wild. И такого говнокода по-прежнему дофига в индустрии.

Вот я тебе специально на всё буду возражать, даже при том, что в последнее время на питоне пишу больше, чем на JS.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 3)
Ответ на: комментарий от menangen

что на сабже от беллара нет npm и не будет

Раз там заявлены модули, то ты обделался еще раз. node_modules - это обычный костыль к require сбоку. Другое дело, что сабж не поддерживает api ноды.

Strip то, я надеюсь, не из пальца высосана?

В js есть trim.

я постоянно вижу работу со слайсами

Но не можешь натужить в тред пример, где это нужно. Конкретно. Выборка каждого n-го символа строки. js тоже умеет делать substring. Кто угодно умеет делать substring. Чем ты хочешь кого удивить?

А тебе что не покажи - у тебя один аргумент: «нет, это не так»

А разве ты что-то показал? Пока, всё, что ты выдал или давно есть или реализовывается одной строчкой.

Ну, в питончике хотя бы строгая типизация и нельзя сложить строку и число без явного приведения типов

Cдулся. Агрументы кончились, съехал с темы и заныл про 1 + "2"

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Cдулся. Агрументы кончились, съехал с темы и заныл про 1 + "2"

+1

wandrien ★★
()
Ответ на: комментарий от menangen
print( 'The Hilton'.istitle() ) #=> True

Ну такое.

'The Hilton'.split(" ").map(v=>v.substring(0,1)).every(v=>v === v.toUpperCase())
'80000'.isnumeric()
!Number.isNan(+'80000')

crutch_master ★★★★★
()
Ответ на: комментарий от Psilocybe

Он выравнивает справа, там выравнивают слева. И?

wandrien ★★
()
Ответ на: комментарий от Psilocybe

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


let leftpad = (str, len, ch = ' ') => {
    str = str.toString();
    if (str.length >= len)
        return str;
    ch = ch.toString();
    if (ch.length == 0)
        return str;
    str = ch.repeat((len - str.length) / ch.length) + str;
    str = ch.substring(ch.length - len + str.length) + str;
    return str;
}


let test = (expected, f) => {
    let result = f();
    if (result === expected)
        console.log("Test OK: '" + expected + "'");
    else
        console.log("Test FAILED: '" + expected + "' !== '" + result + "'");
}

test("12345", () => leftpad("12345", 10, ''));

test("12345", () => leftpad("12345", 4));
test("12345", () => leftpad("12345", 5));
test(" 12345", () => leftpad("12345", 6));
test("  12345", () => leftpad("12345", 7));

test(" --> 12345", () => leftpad("12345", 10, '--> '));
test("> --> 12345", () => leftpad("12345", 11, '--> '));
test("-> --> 12345", () => leftpad("12345", 12, '--> '));
test("--> --> 12345", () => leftpad("12345", 13, '--> '));
test(" --> --> 12345", () => leftpad("12345", 14, '--> '));
Test OK: '12345'
Test OK: '12345'
Test OK: '12345'
Test OK: ' 12345'
Test OK: '  12345'
Test OK: ' --> 12345'
Test OK: '> --> 12345'
Test OK: '-> --> 12345'
Test OK: '--> --> 12345'
Test OK: ' --> --> 12345'
wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 2)
Ответ на: комментарий от Psilocybe

Я в курсе. Мне влом писать универсальный pad с проверками, да и wandrien уже выручил.

crutch_master ★★★★★
()
Ответ на: комментарий от wandrien

хотя речь про строки вообще шла в контексте sh

Так питон и создавался в т.ч. для работы со строками в контексте sh, а javascript для рисования снежинок, как тут уже писали

Вот я тебе специально на всё буду возражать

Так ты тут всем назло отморозишь уши

Какой же menangen умный, и как мы сразу не догадались взять питон

Думаешь, сотни компаний используют питон для автоматизации скриптов и сборок, Buildbot, Ansible - которые написаны на питоне, это всё не от далекого ума?

menangen ★★★★★
()
Ответ на: комментарий от crutch_master

всё, что ты выдал или давно есть или реализовывается одной строчкой

Ну давай, покажи одной строчкой на js

'   '.isspace() #=> True
' the '.isspace() #=> False
menangen ★★★★★
()
Ответ на: комментарий от crutch_master

Где примеры его нужности?

В парсерах, погугли что это такое

А где примеры его не нужности?

menangen ★★★★★
()
Ответ на: комментарий от menangen

Ну давай, покажи одной строчкой на js

Тред выше читай.

В парсерах, погугли что это такое

Ты заявляешь о его крутости, ты и гугли. И пруфы сюда носи. Фанбои как всегда. Как кококо, так быстро, а как пруфы, как хер допросишься.

А где примеры его не нужности?

А что, ненужность надо доказывать?

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от menangen

javascript для рисования снежинок, как тут уже писали

Думаю, что кому-то стоит перестать разговаривать мемами и начать думать своей головой.

сотни компаний используют питон для автоматизации скриптов и сборок, Buildbot, Ansible

Думаю, что кому-то стоит перестать аргументировать отсылкой к авторитетам и начать отвечать за свои собственные слова.

питон создавался в т.ч. для работы со строками

Питон создавался как учебный язык и в таком качестве и пошел в народ. Как результат имеем залежи говнокода, написанного джунами без понимания архитектуры, уже местами превратившегося в окаменевшее легаси.

Ты очень к месту упомянул слайсы. Я как раз недавно разгребал кучу write-only говнокода с понатыканными копипастом слайсами и переписывал на читабельный вид, попутно сократив этот участок кода процентов на 50. Особенно доставляет, когда в слайс защиты магические константы, которые должны соответствовать результату арифметических действий над длиной других магических строковых констант.

Думающему кодеру задуматься бы о том, что если в программе 2 раза к ряду встретился нетривиальный слайс (с обеими границами), то он явно что-то делает не так, и нужно оформить логику в отдельный метод.

Но тут как раз menangen приходит на форум и начинает про мощщщь слайсов будто как специально в качестве иллюстрации на тему кодерских качеств типичного питониста.

wandrien ★★
()
Ответ на: комментарий от crutch_master

Ага, ты обделался с

istitle()
А мне тебе примеры ещё носи и подавай. Тут уже всем очевидно, что питончик имеет развитую библиотеку по работе со строками, кодировками и прочим, а в javascript без npm никуда

menangen ★★★★★
()
Ответ на: комментарий от menangen

Ага, ты обделался с istitle()

Странно, ведь обделался как раз ты.

wandrien ★★
()
Ответ на: комментарий от menangen

Ага, ты обделался с
istitle()
'The Hilton'.split(" ").map(v=>v.substring(0,1)).every(v=>v === v.toUpperCase())

Научить читать для начала.
Длинно? Да. Можешь сделать из этого функцию или засунуть в прототип string, если тебя это ущемляет и хватит мозгов.

обделался

Обожемой нету какого-то локального не нужного метода == обделался, ну ок.

Тут уже всем очевидно, что питончик имеет развитую библиотеку

На заре разработки насрали в библиотеку своими местечковыми методами которые, нужны чуть чаще, чем никогда - это у них называется развитая библиотека. Хоть из js повыпиливати все эти bold и прочий мусор для html.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

На заре разработки насрали в библиотеку своими местечковыми методами которые, нужны чуть чаще, чем никогда - это у них называется развитая библиотека. Хоть из js повыпиливати все эти bold и прочий мусор для html.

+много

wandrien ★★
()
Ответ на: комментарий от menangen

а в javascript без npm никуда

Никто тебе не мешает тащить кошерный код с прямо с гита как диды и делать свой самый лучший ПМ без говен. Вменяемые программисты npm срача не разводят. См https://www.npmjs.com/package/oracledb, например.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от wandrien

На регекспах любой дурак напишет

Но помогут ли они тебе здесь?

mapping = str.maketrans("abcs", "123S")
# преобразуем строку
"abc are the first three letters".translate(mapping)
#=> '123 1re the firSt three letterS'
menangen ★★★★★
()
Ответ на: комментарий от menangen

На регекспах любой дурак напишет

У тебя там под копотом что-то другое?

Но помогут ли они тебе здесь?

Ты думаешь из двух строк сложно сделать цикл с replace? Тебе намного сложнее будет показать, где нужен именно вот такой tr, кроме как для того, чтобы испортить строку.
Вот, ман tr'а: https://www.opennet.ru/man.shtml?topic=tr&category=1
Там так делают upperCase. Но, понимаешь, проблема в том, что у нас уже есть upperCase.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от menangen

На регекспах любой дурак напишет

На регекспах сразу видно, что тут написано «строка ненулевой длины должна быть из пробельных символов от начала до конца». А что такое isspace() я в душе не е^Wпредставляю, если предположить, что я не знаком с питоном. Должен быть одиночный пробельный символ? Все символы строки должны быть пробельными? Достаточно любому символу быть пробельным? Пустую строка считается пробельной или нет? Нужно лезть в документацию за этим.

Гвидо там топил за то, чтобы каждая задача решалась единственным, простым и наглядным способом. Так вот можешь написать ему письмо, что у него не вышло

любой дурак напишет

Ну ты же не смог.

Но помогут ли они тебе здесь?

Ты прикалываешься что ли?

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/replace

wandrien ★★
()
Ответ на: комментарий от wandrien

Ты прикалываешься что ли?

Кстати да. В replace можно вторым аргументом передать функцию и заменять символы по хешу, если так хочется.

var rep = {a : "A", b : "B", c : "C"}
"abc".replace(/[abc]/g, (c)=>rep[c])
И тут я могу уже утверждать, что maketrans в таком виде - говно, а этот подход более универсальный и фичастый.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 3)
Ответ на: комментарий от wandrien

1. https://lurkmore.to/Копипаста:Не_стоит_вскрывать_эту_тему

2. ващет до того как депрекейтнуться и после шоу с отвалам, реализация дополнения была вполне логарифмической ( да ещё преивал сделали для «наиболее частых» случаев) from https://github.com/left-pad/left-pad/blob/8c590fde3cc3f084f7ecf2568acef3bd055...

module.exports = leftpad;

var cache = [
  '',
  ' ',
  '  ',
  '   ',
  '    ',
  '     ',
  '      ',
  '       ',
  '        ',
  '         '
];

function leftpad (str, len, ch) {
  //convert the `str` to String
  str = str +''; 

  //needn't to pad
  len = len - str.length;
  if (len <= 0) return str;

  //convert the `ch` to String
  if (!ch && ch !== 0) ch = ' ';
  ch = ch + ''; 
  if(ch === ' ' && len < 10) return cache[len] + str;
  var pad = '';
  while (true) {
    if (len & 1) pad += ch;
    len >>= 1;
    if (len) ch += ch;
    else break;
  }
  return pad + str;
}
//© 2021 GitHub, Inc.

[/quote] - вполне достойное вынесение в модуль качественное(относительно новичкового делать кучу новых строк с разницой в длине на 1 символ а потом всё это удалять сразу)

зы. непонятно зачем не:
  while (len) {
    if (len & 1) pad += ch;
    len >>= 1;
    ch += ch;
  }

3. Примечательно как велик академик Ершов с его «Программирование вторая грамотность» http://ershov.iis.nsk.su/ru/second_literacy/article и конкретно вот этот пиктрелейтед: http://ershov.iis.nsk.su/files/second_literacy/nl_25_1.jpg

qulinxao3
() автор топика
Ответ на: комментарий от Toxo2

помню. %*;: ? неа.

не опровергая ваши предположения..

стал «исследовать как эволюционировала LUA» - статья в HOPLII(III?) 2006 Года есть и на lua.org - и потом - там заметна конвергенция с Python ( и не вполне ясно возможно источник что-то третье некоторой фичи которая ща и в там и там)

не которое время назад заметил, что [user]MOPKOBKA[/user]

Почему lua? (комментарий)

мне интересен язык(универсальный) у которого есть замыкания , который можно из консоли как шелл использовать ()и для которого есть приятные иде, синтаксис не настолько забюрократизирован как в жабе/шарпе - ну и да что-бы было массовое.

то что ща JS (2020)(лет как 7?) стал таковым - ну и хорошо

т.е «сервер сайд» персонального компа :)

пока node.js - а quickjs - для реальных(sic!) вещей.

qulinxao3
() автор топика
Ответ на: комментарий от wandrien

ваще - вот чего не хватает ( реально ) в обучение программистов ( ибо не все могут сразу заметить «динамику событий») - степень важности явлений общественной жизни на уровень успешности той или иной технологии - следовательно насколько университетское образование важно а когда реально бесполезно(в утилитарном смысле)

чтение книг очень дорогое удовольствие почти так же дорого как личная глупость(которая самое дорогое удовольствие на свете)

qulinxao3
() автор топика
Последнее исправление: qulinxao3 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.