PHP обертка над стандартными функциями для работы со строками

Здравствуйте. В силу того что пхп функции, особенно строковые — это полный адъ(неразбериха с параметрами и именованием, utf8), стал вопрос поиска обертки чтоб сделать разработку легкой и приятной, как на нормальных языках.

Я нашел такую: string.readthedocs.org/...​en/latest/quickstart.html

Кто то ее использовал в рабочих проектах? Или может есть другие, которые вы используете?

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Я просто оставлю эту ссылку github.com/...iadoz/awesome-php#strings здесь и буду надеятся, что на DOU подобного рода вопросы не будут всплывать.

Сергей, коль уж вы здесь, то вопрос.
> подобного рода вопросы не будут всплывать
что плохого, на ваш взгляд, в подобных обертках?

И второй вопрос, offtopic, но всегда хотелось узнать. Вы занимаетесь разработкой весьма сложной системы. Системы, которую нельзя просто взять поставить и пользоваться.
Как по мне, так это явный enterprise. Почему php а не java или .Net к примеру?

Вопрос чисто из интереса, без подвохов. Просто я считаю что потенциал у системы огромный. Но использовать ее кастомно для какого-то конкретного заказчика через чур сложно.
Я не просто так это говорю. Я пробовал написать CRM с определенным функционалом на базе ORO Platform. Было это чуть более года тому назад, но я реально чуть мозг не сломал разбираясь в этой платформе. И в итоге получается что нужно либо ориентироваться только на эту платформу (по сути становясь типа Magento специалиста) либо не трогать ее вообще.
Что я хочу сказать — сложность у вашей платформы просто зашкаливающая.

И вопросы:
1. Вы пишете платформу под конкретных заказчиков (ведь согласитесь, что не вариант уваливать кучу денег в то, что возможно будет слишком сложным в поддержке)?
2. Почему php, symfony (frontend вообще трогать не буду, для меня это темный лес) а не java?

P.S. и я не просто так спрашиваю. Мне реально интересно. Я уже более года не смотрел в код ORO, но раньше это была система из очень связанных компонент, которая хоть и была разделена на бандлы, но использовать их по отдельности было попросту нереально.
Т.е. собрать систему на исключая некоторые из компонентов было просто нельзя. Изменилось ли что-то сейчас? Можно ли использовать ORO platform для написания своей CRM без привязки например к business unit (если я не ошибаюсь, так они назывались).

P.S2. И не подумайте что я стебусь. CRM реально крутая. UI мне очень сильно понравился. Но просто тяжела эта штука черезмерно.

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

но и написал что подобного рода вопросам здесь не место.
Вот и интересно почему.

что плохого, на ваш взгляд, в подобных обертках?

Есть же stackoverflow, тостер, и прочие. Думаю такие вопросы целесообразно задавать там.

Как по мне, так это явный enterprise. Почему php а не java или .Net к примеру?

Лично я разработкой конкретно платформы не занимаюсь. Но попробую ответить )

1. Да, у нас есть клиенты которые покупают enterprise лицензию. Но разработка OroPlatfrom, OroCRM и OroCommerce идет независимо от клиентских проектов. Конечно работа с клиентами помогает планировать расширение функциональности, под потребности реальных пользователей.

2. Symfony был выбран как один из самых популярных и продвинутых на то время фреймверков.
Думаю если бы пришлось выбирать сегодня, выбор был бы таким же. А почему Java? Почему не RoR? Скорее всего потому что популярная платформа + большой опыт + практически свободный развивающийся рынок, так как все решения что были до этого, уже морально устарели. Собственно и php уже добрался до уровня, когда на нем можно строить enterprise решения сравнимые с java и .net. С приходом php7 будет еще веселей.

Насчет сложности, думаю основная проблема как и с Magento в свое время, это недостаток документации. Над этим сейчас активно пытаемся работать. И да, пользоваться отдельно компонентами так просто не выйдет. Есть ли в планах ослабление зависимостей я не знаю.

Спасибо за ответ.

У Oro CRM и Magento общий «папа», так ведь? Я о Диме Сороке.
И если не секрет, много ли ex-magento девелоперов ушли в oro?

В общем случае не использую обёртки: параметры подсказывает IDE, если нужно прочесть подробнее о поведении функции — заглядываю в мануал. Использую кохановскую обёртку в некоторых случаях, когда нужен например strtolower для utf-строк

github.com/danielstjules/Stringy

Но я не использовал ее. Да и не стал бы пока (возможно подходящих задач не было).

Вот видео моего скромного приложения, которое написал сам и по своей же идее. Там не показана страница добавления, так как я это заснял чтобы показать знакомому новые фишки приложения, а не финальное видео. Страница добавления простая с двумя дейт и тайм пикерами, текстовым полем названия, и двумя текстовыми полями для ручного ввода даты и времени. Это к вопросу осилил я или не осилил. Если уж кому то хочется так знать.

www.youtube.com/watch?v=IcdMca1pqR8

П.С. не все о чем я успел прочетсь в андроид доках я использовал по логичным причинам что оно там не вписывается.

У вас в ИДЕ нет подсказок по функциям?
Вас смущает последний параметр в функциях mb_* ?
Да пофиг на кривизну этих функций. Вы сами написали что их не много нужно и если вам 3 раза нужно вызвать str_replace, strpos, etc то так уж и быть загляните в мануал. Если писать больше — поищите готовые решения.

Ответ на ваш вопрос: не использую обертки. Либо обертки встроенные в функционал фреймворка/нужной мне библиотеки, либо пишу самостоятельно инструмент для необходимых манипуляций со строками

не использую обертки
печаль. Складывается ощущение что их практически никто не использует.
У вас в ИДЕ нет подсказок по функциям?
когда сидел на виндовсе то использовал нотепад++ и там не было, ну или я не нашел где включить. Теперь поставил netbeans с пхп плагином и да, подставляет.

нотпад++ ... это даже не смешно. вы небось еще по фтп файлы на сервер загружаете?

ну поищите в интернетах статьи о форкфлоу. возьмите норм ИДЕ типа phpstorm/netbeans

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

вы небось еще по фтп файлы на сервер загружаете?
ну по фтп соединению через айдишки. В нотепаде тоже был плагин для работы по фтп. Все автоматически подгружается и загружается. Бывает что заказчик дает сфтп соединение и по нему работаю. Что в этом плохого? Ну и нотепад++ судя по опросу на хабре пользует очень много программистов.

Избавляйся от этих привычек. Тебе нужны Intellij, Docker, git.

Так что плохого в фтп? Я теперь работаю на мелких заказчиков и у них нет проекта в гите, только продакшн версия.

Intellij

netbeans чем хуже? Я понимаю что вы хотите навязать свое видение какая должна быть айдишка, но зачем? Разные люди разные мнения.

Доказывать не хочу, это проверенные инструменты. Еще не было ни одного человека, недовольного выбором.
А касательно фтп — какой бы не был мелкий заказчик, резать по-живому — не оправдание. Поставь dev environment, CI, объясни заказчику, почему это важно.

Поставь dev environment, CI, объясни заказчику, почему это важно.
боюсь, для начала нужно это же понять самому ТС

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

Заказчик как правило не понимает, как делаются эти правки.
Зато вот наглядно продемонстрировано, почему php считают быдлоязыком. Потому что умеет.

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

Тестируешь и дебажишь там же?

Ага, а где ж еще, если там связка с проектом. Хотя есть случаи когда можно вытянуть отдельную часть. Я знаю что это очень плохо :( Вообщем буду теперь стараться на своем локальном тестировать и заливать только готовое. Но вообще я так тестирую чтобы как можно меньше времени часть сайта не работала.

Заверни хотя бы изменения в блок
if ('155.201.12.5' === $_SERVER['REMOTE_ADDR']) { ... }
со своим айпишником. Ну и подними локально. Vagrant + Ansible в помощь. Там и деплой автоматизируешь без ftp и git.

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

Когда берёшься за мелкие задачи — по-другому нельзя. Потому что «там работы на 15 минут» с соответствующей оплатой и доступ по FTP. А вытянуть сайт, имея только один фтп — это попить чайку от получаса. С таким подходом невыгодно брать мелкие задачи. А крупные пока не осилишь, да и не даст никто. Так что «резать по живому» — очень даже выход.

Я как-то задался целью автоматизировать деплоймент. Со временем это вылилось в создание пачки скриптов, которые поднимают абсолютно любое окружение с php/ruby/python/nodejs+mysql/percona/postgres/mongo/redis+etc. Сейчас создать окружение = прописать 5-15 параметров типа пароля бд, имени хоста или айпишника продакшн-сервера. Кроме создания окружения, есть деплой / роллбек / аналитика метрик / запуск тестов / профайлер, т.е. мини-CI локально. И стратегию деплоя (scp / rsync / git) можно поменять в конфиге.
Кроме того, jenkins и sonarqube у меня установлены локально в отдельной виртуалке, с шаблонами для типовых фреймворков.
Итого, гипотетическая просьба «поменять текст на главной» у меня занимает минут:
— 5 — поднять локальное окружение по адресу local.site.com;
— 15 — сделать правки;
— 5 — собрать билд и задеплоить;
Внезапные задержки возникают, если:
— БД недоступна и получить дамп нельзя;
— есть какой-то хитрый софт, который я не умею ставить (недавно столкнулся с OrientDB + supervisord), но это автоматизируется один раз;
— скорость скачивания с ftp очень маленькая или там тысячи файлов (частично эту проблему решил игнором всяких upload или vendor папок)

Как правило, «там работы на 15 минут» звучит минимум раз в день. Экономия подобной автоматизации налицо. Поэтому не нужно утверждать, что по-другому — нельзя. Можно, вопрос лишь в навыках и лени.
P.S. А клиента биллишь тоже за 15 минут?

И сколько лет нужно заниматься задачами на 15 минут, чтобы такую пачку скриптов иметь?

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

Ну вот видите, симфони. А мы же не знаем, какие задачи ТС решает.
Вообще, если кто-то что-то не использует, то возможно ему это и не нужно (не припекло ещё).

Ну заготовки у меня появились уже под все рыночные cms/framework, и не для одного языка.

Вообще, если кто-то что-то не использует, то возможно ему это и не нужно
Или он просто не знает об альтернативе.
какие задачи ТС решает
пока что ничего серьезного не делаю, и цмски даже не учил. Вот в фреймворке приживусь. Решаю по правкам. Дают фтп, краткое тз, и вперед пилить скрипт к сайту.
А касательно фтп — какой бы не был мелкий заказчик, резать по-живому — не оправдание. Поставь dev environment, CI, объясни заказчику, почему это важно.
А если на 1 раз заказ?
Ну и нотепад++ судя по опросу на хабре пользует очень много программистов
Это не самый удобный инструмент просто для постоянной работы с php. Да, можно доставить плагинов, настроить.
А можно взять PhpStorm, в котором из коробки все нужные каждый день фичи.
Ну и нотепад++ судя по опросу на хабре пользует очень много программистов.
мне кажеться это в основном фрилансеры или начинающие.

Думал таких людей уже не существует

Все скатилось к обсуждению личности, хотя я просто спрашивал об обертках и пользует ли их кто. Любят же тут говорить)

Почва была хорошо подготовлена /s

Я не знаю что там с веб java, но если цель веб php/python и что там еще, то тогда да, надо и js выучить и html, css и потом еще что то.JS основы учятся за неделю-две, потом еще неделю на jquery и можно в бой. А то что говорят что в JS надо понять какую то дзен — не верьте. JS — максимально упрощенный язык чтобы любая обезьяна могла «спец эффекты» писать, точнее ляпать. Веб — это быдлокодинг, и джуниор 100% в него попадет. И да, быдлокодинг настолько, что даже там где можно на чистом js написать — там пишут на jquery. Не быдлокодинг начинается наверно только с уровня мидл и выше, и то хз, не везде. Ну или попадите в хорошую компанию. Вообщем все неаселяторы JAVA и подобного сложного идут в веб, который я выше описал. А JAVA — это для настоящих программистов, там жуниора быдлокодера не возьмут, в то время как в пехопе даже ООП много кто не знает из джунов.
and then...
Понял что веб более нравится чем мобильная и дал заднюю в веб.
???

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

П.С. ну и тогда я был более категоричен в некоторых вопросах. Ошибался, попросту говоря.

А еще с ТС в споры какие-то вступал :)

Потому что я люблю спорить) И иногда троллингом приправляю, но уже перестал тут так делать.

Даже не знаю что сказать, чтобы не обидеть...

Не треба нікого ображати, просто цікаво спостерігати як у людини за 2,5 місяці кардинально змінилася точка зору )

Я бы не назвал это кардинальным. В чем поменялось:
1. веб все таки сложная вещь в которой можно развернуться со всякими паттернами. А в мобильной разработке: наследуй это, наследуй то. Минимальные участки кода обработки. Ну и проекты на пару месяцев. Ориентированность более на вид, чем на логику. Ах да, сложность андроид разработки высокая, я не хочу сказать что малая. Слишком много всяких вещей есть которые надо выучить и запомнить. Просто для меня там мало того что я люблю.
2. мидл веба уже крутой разраб.
3. неосиляторы. Количество вакансий в пхп зашкаливают, в джаве минимальны. Все таки наверно лучше пойти там где меньше конкуренции и сложность входа. Но не для того чтобы легко ввойти, а чтобы быстро продвинуться выше

Ну и собственно все что изменилось

Я не жалею что потратил пол года на джаву и андроид. Я научился учиться, прокачал английский в чтении, узнал как правильно кодить(ибо строгая джава это оно), разобрался с фронт ендом как и с чем его едят. После этого можно стать хорошим пхпшником. Хотя будь в вебе более популярен питон я бы наверно пошел в этом направлении, или не пошел, говорят там философия отличная от сишной которая в джаве и пхп.

Есть какой-то пример где возникали трудности ?

Не джава а точнее андроид. Понял что веб более нравится чем мобильная и дал заднюю в веб. А так как в вебе на удаленке(фриланс) везде пых то смирился с его кривизной. Тем более что есть постоянные заказчики и деньги уже могу зарабатывать.

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

Просто не осилив. Це норма для таких ковбоїв, через місяць-два буде щось нове «вчити»

Та думаю, шо осилив. Інша справа, що з вакансіями на PHP реально легше. А якшо сидіти вдома, наприклад, в маленькому райцентрі, то фріланс ясно дає зрозуміти в яку сторону розвиватися.
Це все нормально і нічого поганого не бачу. Інша справа, шо для чого тоді постійно гнати на PHP? «Не плюй в колодязь, з якого доведеться пити» ©

Та думаю, шо осилив.
Тоді не бачу перешкод, щоб пошукати вакансії в інших містах, якщо авто знаходиться
в маленькому райцентрі
«Не плюй в колодязь, з якого доведеться пити» ©
І додати нічого.
для чого тоді постійно гнати на PHP
просто вижу его недостатки и говорю о них. От этого я на нем писать не разучился...

Ну, тоді вітаю у клубі бидлогавнокодерів!

В сторону Zend смотрел? Там есть хорошие инструменты для валидации и фильтрации. Оформлено пакетами.

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

Yii2 — це просто фреймворк. Досить непоганий.
Але на Symfony2:
1. Більше роботи (це одного разу вже стало приводом змінити мову програмування)
2. Код пишеться в стилі джави.

1. Что то не замечаю. На апворке по уии в 2 раза больше проектов, на укр сайте вакансий уии тоже почти в 2 раза обгоняет.
2. Можно детальнее? Я на джаве кроме под мобильник только немного писал в учебных целях + 1 парсер на заказ.

Я думаю, Евгений имеет ввиду аннотации, кучи xml-конфигов, схожесть SF+Doctrine на Spring+Hibernate, и класс-сервис на каждый чих.

Аа, так я джава веб не учил, джаву се немного + андроид. Т.е. пофигу что там такое есть.

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

Так там функционал и сделан — кроме нормальной структуры и приятности работы, библиотека еще и позволяет безопасно с утф8 работать. Т.е. смысл есть и большой.

Я имел ввиду бизнес-логику и сервисный слой, а не сахар для языка.

Отсутсвие нормального сахара для пхп и делает его плохим языком. Кривость языка это огромный минус.

Кривость рук — вот самый огромный минус. Для чего в реальном приложении (не пример по книжке Котерова) может понадобиться низкоуровневая работа со строками?

Какая низкоуровневая? Вы о чем? Обработка строк это стандартная задача для программиста.

Кривость рук — вот самый огромный минус
согласен. Кривость рук того кто писал PHP

Приведи пример реальной бизнес-задачи.

Что? Т.е вы со строками совсем не работаете? И что же вы пишете? Реальный пример бизнес задачи это то что я делал пару часов назад — обрабатывал данные автомобилей и делал из них правильный формат данных для импорта на сайт объявлений.

Я работаю с библиотеками, которые предоставляют нужный функционал. Например, нужны ЧПУ — я беру Gedmo/Sluggable. Если нужна транслитерация — есть Transliterator класс. Для множественных форм есть Doctrine/Inflector, тримминг и фильтрация форм — Symfony/Form. Они покрыты тестами, поддерживаются и обновляются, и изобретать велосипед здесь нет смысла.
Ты приводишь пример некого парсера, который из говнотекста пытается сделать нужный формат. Напиши свой набор классов для фильтрации, напрягись один раз, напиши там нужные конвертации с всякими str_replace и filter_var, вымой руки, и используй их, чем по всему проекту размажешь $str = new Str(’title’);

Не понял предложение. Мне пойти и переписать кривые стандартные функции пхп, чтобы потом при необходимости обработки строки использовать их? Если так то может лучше подыскать что то готовое? Согласен что вариант с созданием объектов для строк не лучший.

Нет. Предложение — вынести логику по конвертации плохого текста в хороший в отдельный класс(ы) с фасадом типа VehicleTitleNormalizer::normalize($title) и нашпиговать этот класс нужными str_replace, trim и ucfirst. Один раз хорошо написанный класс будет служить долго, и пляски с str_replace будут сведены к минимуму.

В каждом сайте объявлений свой формат и они часто меняются. Т.е. зачем пытаться писать все сейчас и не факт что подойдет. И там не так уж и часто используются эти функции. Ваши мысли я понял: если чем меньше работать с такими стандартными функциями то жизнь пхпшника становится легче. Постараюсь так делать.

если не часто работать с такими стандартными функциями то жизнт пхпшника становится легче
Да, все верно. Я забыл, когда последний раз плясал вокруг strtr и прочего шлака. Даже с массивами работаю большей частью через Doctrine/ArrayCollection. Эта тема с именованием — печальное наследие С-функций, там такой же шлак с параметрами и прочим.
Даже с массивами работаю большей частью через Doctrine/ArrayCollection
ого. А как быть когда ты не делаешь целый модуль или проект, а требуется допилить то что другой делал? Подключать то с чем сам работаешь не очень правильно, для малой доработки.

Если другой программист говнокодил как мог и есть хотя бы 10% буфер на рефакторинг — почему бы и нет? Я же не привел пример никому неизвестной библиотеки, а вполне годного решения. Тем более что можно не тащить весь ORM: github.com/doctrine/collections. В особо запущенных случаях использую ArrayAccess имплементации (ArrayObject, SplObjectStorage и прочие итераторы), благо доктрина так же имплементирует эти интерфейсы.

Даже с массивами работаю большей частью через Doctrine/ArrayCollection.
Проблему нагрузки наверное решаете дополнительными серверами? Я б по рукам за такое дал.

Обожаю микрооптимизаторов. Откуда уверенность что массивы работают быстрее чем объекты? gist.github.com/nikic/5015323 стоит прочитать.
И в любом случае лишняя нода в балансере стоит 10 долларов в месяц.

Видимо мы решаем разные задачи на работе.

10$ это EC2 микро инстанса. Чуть мощнее калькулятора :)

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

И какие же задачи вы решаете?

Вы б доучились. Перед оценкой “кривизны рук” разработчика инструмента, которым успешно пользуются очень много людей и очень давно.
По поводу обертки — вы слишком много времени уделяете поиску удобного сахара. Еще бі понял если бы для массивов искали. А для строк — все что нужно есть. php.net в закладки, поиcк там вполне себе нормальный.
Или может я не понял что вас не устраивает в встроенных функциях

Так не я один оцениваю. Это говорят те кто спрыгнул на питон.

вы слишком много времени уделяете поиску удобного сахара
изначально(после некого опыта с пхп) хотелось хороший обдуманый интрумент(язык), но пхп вездесущий.
все что нужно есть
есть, только нелогично сделано и не все работает с утф8. Конечно есть мб функции но и не для всего. Ucfirst к примеру. Короче говоря удобность работы с этими функциями низкая.
те кто спрыгнул на питон.
Ну-ну. Я и тем и другим пользуюсь. И не говорю. Интересно что вы будете говорить о JS когда до него доберетесь :)

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

Это говорят те кто спрыгнул на питон
Из тех перебежчиков, которых я знаю, они не писали на php ничего сложного, лапшу на фрилансе поразбирали и CodeIgniter один раз поставили.
Попробуй сделать одну и ту же задачу на разных языках. Например, написать простую CMS-ку или блог на Symfony / Django / Rails, использовать контроль версий, и замерить затраченное время. И потом сравнить результаты. Стереотипов сломается десятки.

Речь не о времени а о приятности работы с инструментом. Я не говорю что пхп непригоден для задач. Будь так он бы не выжил.

Вот пока напишешь на разных платформах, мнения о приятности поменяются кардинально.

А нет. вру. с мультибайтовыми строками оно не работает, посмотрел в код и там нет ниодного использования функций mb_. Тогда она бесполезна. Нашел другую: pageconfig.com/post/portable-utf8

Я себе представляю как это использовать в цикле на 10 000 итераций. Только создать кучу объектов Str() займет несколько секунд. Выигрыш только в эстетическом удовольствии

Нужно менять синтаксис языка, оставляя старый функционал для обратной совместимости. Было похожее RFC для PHP7 - wiki.php.net/...consistent_function_names но его даже не поставили на голосование :(

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

но его даже не поставили на голосование

Т.е. в седьмой версии нормальных функций для работы со строками тоже нет? Или они все же сделали что то?

Нет, стандартные функции не трогали.

Факт, создание объектов медленная операция.

Функции и так нормальные, если тяжело запомнить — IDE подсказывает. Для поддержки UTF-8 есть mbstring

Я себе представляю как это использовать в цикле на 10 000 итераций.
А зачем это использовать в цикле на 10000 итераций, в первую очередь?

Підписатись на коментарі