Главная Настройка Mobile Контакты NSFW Каталог Пожертвования Купить пасскод Pics Adult Pics API Архив Реквест доски Каталог стикеров Реклама
Доски


[Ответить в тред] Ответить в тред



<<
[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 87 | 8 | 47

Как правильно кодить? Аноним 13/12/17 Срд 19:18:37  1107098  
image.png (271Кб, 600x322)
Прочитал эту книгу.
Осознал, что не знаю как вообще сейчас кодят. У меня в конторе используется методология "хуяк-хуяк и в продакшн", но меня это заебало и я хочу расти.

Я понимаю, что каждый кодит по-своему, но всё же должен быть какой-то золотой стандарт в индустрии?
Какой вообще правильный процесс? Какой у вас?
Используете ли вы TDD? Что почитать по тому, как надо?
Аноним 13/12/17 Срд 19:33:55  1107102
>>1107098 (OP)
>какой-то золотой стандарт в индустрии
ооп, мань
Аноним 13/12/17 Срд 19:34:34  1107103
>>1107102
> 2018
> ооп
Уже даже не смешно.
Аноним 13/12/17 Срд 19:39:36  1107108
>>1107098 (OP)
Вообще-то "хуяк-хуяк и в продакшн" (он же аджайл и все его флаворы) - это и есть доминирующий сегодня процесс. Спринты, CI, девопс, вот это все.

Тебя что конкретно интересует-то? Проджект менеджмент? Дизайн архитектуры? Сам процесс непосредственно написания кода? Кодоконвенции? Что?
Аноним 13/12/17 Срд 19:41:32  1107110
>>1107103
и в чём проблема?
Аноним 13/12/17 Срд 19:59:18  1107121
1512672887001.jpg (64Кб, 634x959)
Имхо, проебу все эстимейты, если TDD в ванильном виде попытаюсь заюзать.
Аноним 13/12/17 Срд 20:42:18  1107136
>>1107108
>Сам процесс непосредственно написания кода? Кодоконвенции?
Это.

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

Или вот, допустим, надо тебе написать средний проект, условно, интернет-аукцион какой-нибудь.
Какой будет примерный процесс, на уровне кодинга?
Аноним 13/12/17 Срд 22:54:36  1107189
1
Аноним 13/12/17 Срд 22:57:07  1107191
>>1107121

переписывать тесты когда неправильно понял заказчика или заказчик сам не понимает что ему нужно пока не увидит чтото работающее ебать продуктивное занятие
Аноним 13/12/17 Срд 23:26:06  1107214
>>1107110
В ооп.

мимокапитан
Аноним 13/12/17 Срд 23:46:30  1107221
>>1107136
>написать средний проект
Ну так это же не уровень кодинга, а как раз уровень проекта\дизайна, не? Уровень кодинга - это, типа, отослать один патч, например.

В "ванильном ТДД", как анон выше выразился, ты берешь чанк функциональности и начинаешь писать с юз-кейсов в топ-даун стиле. То есть тебе надо написать функцию foo, например. Ты начинаешь думать, что она вообще должна делать и что от тебя требуется. Пока думаешь - записываешь свои мысли в коде. Типа, "тэк блэт, если нам пришел frobnicated, то мы хуярим запрос к базе и возвращаем , а если не frobnicated, то что мы делаем?.. тээк... эксепшн корочи кидаем!" - и пока ты это думаешь, ты это сразу записываешь в виде тестов (у меня псевдокод): given frobnicated x, mocking query(x) = "hui": foo x => "hui". given unfrobnicated x, foo x => throws Exception. Тэк блэт, стоп, а если нулл пришел? given x = null... тэк, возвращаем дефолтный frob: foo x = frob... так, а откуда мы этот frob получим? Ага, значит у нас там должна быть внутри функция bar, и она возвращает дефолтный frob, и нам еще конфиг оказывается надо передавать! Тэк, ок: given conf = {...}, mocking bar(conf) = frob, foo conf x = frob. Тэк, блэт...

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

Спойлер: АХАХАХА НИКТО ТАК НЕ ДЕЛАЕТ ВСЕМ ЛЕНЬ ВСЕ СПЕШАТ И ВООБЩЕ НИКТО ТАК НЕ УМЕЕТ ДЕЛАТЬ ВСЕ ПРИВЫКЛИ ХУЯК-ХУЯК И ХУЯК А ТАК ДЕЛАЮТ ТОЛЬКО ТЕ КТО САМИ ПИШУТ КНИГИ ПО ТДД ДА И ТО НЕ ВСЕГДА
Аноним 13/12/17 Срд 23:56:03  1107231
А, ну и да: я обычно просто открываю файл и начинаю хуярить как попало псевдокод и примеры вперемешку с комментариями, попутно играясь с реплом. Пока хуярю псевдокод - вытаскиваю мелкие функции. Когда более-менее определился, что надо сделать, делаю минимальный рабочий вариант, попутно оставляя кучу туду-комментов. Проверяю в репле, если работает - вытаскиваю из кучи говнопсевдокода и примеров основные ассерты в тесты. Потом начинаю рефакторить, попутно добавляя тесты и дописывая код вместо туду-комментов. Когда получается что-то более-менее законченное, вытаскиваю оставшиеся туду-комменты в таск-менеджер, прогоняю все тесты вчистую, коммичу. Как-то так.

Но это, конечно, если реально что-то такое, где думать\пробовать надо. Чаще просто берешь задачу, делаешь, тестишь-рефакторишь, коммитишь.

И да, с тдд в обоих случаях было бы быстрее, но я как и все привык хуяк-хуяк((
Аноним 14/12/17 Чтв 00:08:26  1107235
15030926920400.webm (3962Кб, 1280x720, 00:00:26)
>>1107098 (OP)
>Что почитать по тому, как надо?
Аноним 14/12/17 Чтв 09:42:12  1107320
>>1107221
>>1107231
Спасибо, примерно начинаю понимать.
Аноним 14/12/17 Чтв 09:46:47  1107324
1512666782002.jpg (75Кб, 640x512)
>>1107191
Ну да, примерно это и имею ввиду.
Аноним 14/12/17 Чтв 10:08:17  1107328
>>1107221
>Почти 2k18
>Мокать
Отдели чистую логику от сайд эффектов, и тебе не придется ничего мокать.
Аноним 14/12/17 Чтв 12:17:09  1107379
>>1107191
Ты походу путаешь юнит-тесты (которые в тдд) с функциональными\интеграционными и прочим "exhaustive" тестированием. Чтобы заказчик увидел что-то работающее, тебе нужно сперва написать что-то работающее. Тдд - это способ написания кода.

>>1107328
Ты не понял. Замени "мокать" на "stub'ать" и перечитай тот пост. Согласен, тут есть путаница в терминах, я просто все виды "test doubles" называю моками. То есть это не про стейт.

Идиотский пример:
ensure: sum [1 2 3] == 6
given that: x uberplus y => x+y

sum [] = 0
sum x:xs = x uberplus (sum xs) -- uberplus еще не написана, но тест sum уже проходит - начинаешь работать над uberplus

Или даже:
ensure: shoutHello "joe" == "HELLO JOE" -- hello mike
given: upperCase "joe" => "JOE" -- еще не написана
Нутыпонел.
Аноним 14/12/17 Чтв 12:18:38  1107380
Вообще, это все в sicp описывается.
Аноним 14/12/17 Чтв 12:34:06  1107390
>>1107121

В ванильном виде TDD для функциональных языков заходит, за счет минимизации сайд-эффектов и т.п. и т.д..
Аноним 14/12/17 Чтв 18:51:43  1107548
14975284456532.jpg (431Кб, 1920x958)
>>1107098 (OP)
Методика в общем случае одна: сначала подумал, сделал декомпозицию, набросал эскизы, потом по кусочкам сделал не особенно напрягая голову. В разных масштабах конечно, баг, фича, итерация, релиз, весь проект, нужен ли вообще этот проект, в чём смысл жизни.

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

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

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

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

---

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

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

Что касается автотестов, это не более чем инструмент. Где-то это средство стабилизации кода (waterfall). Где-то это средство экспериментирования и проектирования (TDD). Так или иначе проверить результат своей работы нужно, и здесь уже что дешевле будет — сколько времени займёт писать/поддерживать тест и сколько времени займёт вручную прощёлкать функционал тобой, коллегами, тестерами вместе взятыми за всё время жизни этого конкретного теста.

По моему личному опыту, на рефакторинг по TDD и 100% покрытие тестами готов раскошеливаться почти никто. Разве что в гитхабик красивый проект с плашками сделаешь себе чтобы показывать всем.
Аноним 14/12/17 Чтв 21:48:29  1107624
Берешь и кодишь правильно без задней мысли.
Аноним 14/12/17 Чтв 21:57:56  1107630
промышленный кодинг - это хуяк хуяк и в продакшн. если появляются время и опыт, то начинаешь писать красивее, но если сроки поджимают, задача малопонятная а проект малознакомый - то говнокодишь, что есть мочи.
Аноним 14/12/17 Чтв 22:01:05  1107635
>>1107630
>но если сроки поджимают, задача малопонятная а проект малознакомый - то говнокодишь, что есть мочи.
Вот иди нахуй с такими советами.
Аноним 14/12/17 Чтв 22:02:02  1107638
>>1107635
ну и продолжай жрать борщи на шее у мамки хули.
Аноним 14/12/17 Чтв 23:29:42  1107689
>>1107638
Интересно причем тут мамка и ее шея...
Аноним 15/12/17 Птн 13:26:32  1107918
image.png (181Кб, 395x492)
>>1107624
Аноним 18/12/17 Пнд 21:54:31  1109336
Спасибо за ответы.
Аноним 19/12/17 Втр 14:18:45  1109568
>>1107918
Ааа, бля, как я проиграл с пикчи
Аноним 19/12/17 Втр 15:42:00  1109593
>>1107098 (OP)
Как сейчас кодят, тебе написали в треде. Как надо кодить, чтобы не было проебов сроков на второй и далее итерации - могу рассказать, но это никому не нужно и даже вредно знать.
Аноним 19/12/17 Втр 16:32:35  1109605
>>1109593
>Как надо кодить, чтобы не было проебов сроков на второй и далее итерации - могу рассказать, но это никому не нужно и даже вредно знать.
-- Василий, 11 "Б".
Аноним 19/12/17 Втр 17:48:41  1109648
>>1107098 (OP)
Кодить правильно - молча
Аноним 19/12/17 Втр 22:02:50  1109699
>>1107098 (OP)
TDD - манятеория. Стандарт - компромисс.
Аноним 19/12/17 Втр 22:09:37  1109703
>>1109699
Ну ладно, TDD применима когда ты с нулевого нуля строишь замок из говна и тебе ничего пока не мешает писать как заблагорассудится. А когда нужно в один замок другой встроить - тут-то TDD и заканчивается, и начинается "хуяк-хуяк, че там тесты?".
Аноним 20/12/17 Срд 08:00:06  1109823
>>1107098 (OP)
Вот мой список правил, который я сам использую при программировании на любом языке:
1) Использовать как можно больше маленьких функций, процедур и методов, размером не больше экрана.
2) Использовать очевидные и достаточно длинные названия функций, методов и переменных.
3) Избегать коппипасту, отделяя её в отдельные функции.
4) Писать как можно больше тестов.
Аноним 20/12/17 Срд 08:27:26  1109825
>>1109605
Детектор на PHP написан?
Аноним 20/12/17 Срд 08:28:24  1109826
>>1109823
Этого мало. 4 нихрена не помогает.
Аноним 20/12/17 Срд 08:35:33  1109828
>>1109826
Тесты очень сильно помогают, так как иначе есть большой риск при написании кода сломать что-то уже работающее. Особенно актуально это бывает при групповом программировании.
Аноним 20/12/17 Срд 11:20:34  1109880
>>1109823
Двачую все пункты.

>>1109826
Ничоси не помогает! Да это единственная вещь, которая тебе всегда поможет, вне зависимости от качества кода. Сам видел стабильно работающий проект, покрытый-перепокрытый всевозможными тестами, внутри которого творился неподдерживаемый ад и израиль. Только на тестах всё и держится там.
Аноним 20/12/17 Срд 11:24:40  1109882
>>1109828
Тесты = код. А значит в тестах могут быть баги. При чем как твои, так и бизнес-логики.
Аноним 20/12/17 Срд 11:26:13  1109885
>>1109882
Ну охуеть теперь - человек может ошибаться - вот это поворот, как дальше жить?
Аноним 20/12/17 Срд 14:06:43  1109969
>>1109825
Нет, на С++.
Аноним 20/12/17 Срд 16:15:07  1110014
>>1109826
Значит тесты пишете уровня "о вот есть класс, появится ли обьект?"
Если у тебя одно и тоже место отваливается после твоих правок - напиши тест, сэкономишь тонну времени.
"михалыч, у нас на кассе опять чеки отвалились после того как скидку добавили на дилды"
Аноним 20/12/17 Срд 16:18:09  1110017
>>1109882
Вот смотри. Тесты пишут, чтобы код рабочий был, так? То есть в работающем проекте тесты все проходятся. А если что то не работает, то одно подгоняется под другое.
Аноним 20/12/17 Срд 18:42:55  1110105
>>1109880
> Да это единственная вещь, которая тебе всегда поможет, вне зависимости от качества кода.
Если это единственная вещь для обеспечения качества кода, которая вообще есть, то да, она всегда поможет, LOL. Просто далеко не всегда это единственная вещь %%(кому я пизжу, формальные доказательства и SMT на контрактах я один тут во всей стране применяю), и тесты - это как бы last resort.
Аноним 20/12/17 Срд 18:43:23  1110106
>>1110105
Бля, разметка.
Аноним 20/12/17 Срд 20:27:15  1110155
14315047902312.jpg (21Кб, 349x356)
>>1110017
>одно подгоняется под другое.
Аноним 20/12/17 Срд 20:33:19  1110160
>>1110155
Тащемта это ответ на вопрос треда.
Аноним 21/12/17 Чтв 13:49:17  1110354
>>1107103
Ну это пока еще стандарт. ООПный хуяк-хуяк и в продакшн
Аноним 21/12/17 Чтв 13:54:50  1110357
>>1110354
Как там по ООП, можно прямо в классе планировщика задач хуякать свой код или планировщик должен вызвать его откуда-то? Или "по ситуации"?
Аноним 21/12/17 Чтв 15:20:19  1110403
Рекомендую этот блог. Тут тебя научат как правильно кодить
http://www.yegor256.com/
Аноним 21/12/17 Чтв 16:38:38  1110448
>>1110354
> Ну это пока еще стандарт.
Стандарты - это Ада и Си. Все остальные хуярят как придется, без всяких стандартов.

>ООПный хуяк-хуяк и в продакшн
Ты все перепутал. "Хуяк-хуяк и в продакшн" - это методология разработки (аджайл, континиус интегрейшен). К ООП это имеет отношение чуть менее чем никакое.
Аноним 21/12/17 Чтв 16:45:23  1110454
>>1110357
Ты понимаешь что ООП это лишь способ структурировать код, чтобы в будущем не обосраться его поддерживать? Можешь хоть в main() всё писать через вуаил иф иф иф иф иф иф иф. Но уже на паре тысяч строк ты охуешь.
Аноним 21/12/17 Чтв 16:50:26  1110458
>>1110403
Я вот все думаю составить список уродов от мира IT и их блогов.
Аноним 21/12/17 Чтв 16:54:15  1110459
>>1110454
>ООП это лишь способ структурировать код
Неверно. Объекты подразумевают определенную (хуевую в общем случае) модель управления состоянием.

Для структурирования кода используются неймспейсы.
Аноним 21/12/17 Чтв 19:19:27  1110518
>>1110454
Понимаю, я тебя спрашиваю - можно или нет? Или можно "иногда"?
Аноним 21/12/17 Чтв 21:58:05  1110625
>>1110518
С точки зрения компьютера - можно.
Компуктеру вообще похуй где ты что пишешь.
Но ты же сам будешь охуевать когда через полгода откроешь свой код.
Аноним 22/12/17 Птн 03:22:35  1110759
>>1110625
Хватит вилять, ООП для кого придумали? Не для компуктера же, вот и ответь мне на вопрос.
Аноним 22/12/17 Птн 03:56:21  1110765
codemonks.jpg (135Кб, 800x535)
>>1110759
>ООП для кого придумали
Ты не поверишь, это — ..............
Аноним 25/12/17 Пнд 22:03:24  1112367
>>1107098 (OP)
>Используете ли вы TDD

ну если кроме как в юнит тесте не проверить свою писанину, то приходится писать тест и код почти одновременно

но переписывать потом тесты и искать что в них сломалось когда меняют спецификацию тот еще геморрой
Аноним 26/12/17 Втр 08:43:44  1112510
>>1107098 (OP)
>Я понимаю, что каждый кодит по-своему, но всё же должен быть какой-то золотой стандарт в индустрии?
Не-а. В первую очередь это творческий процесс и ни о каком стандарте не может быть и речи. Стандарты разрабатывают для макак.
Аноним 26/12/17 Втр 13:27:40  1112572
>>1112510
>творческий процесс
Суть одноразового быдлокода. За стандартомакакой не больно поддерживать хотя бы.
Аноним 26/12/17 Втр 14:58:23  1112729
>>1112572
В таком случае о каком росте может идти речь?
Аноним 26/12/17 Втр 15:50:10  1112749
>>1107108
>Проджект менеджмент? Дизайн архитектуры? Сам процесс непосредственно написания кода? Кодоконвенции?
Меня всё вот это интересует. Как разобраться?
Аноним 02/01/18 Втр 15:33:12  1114954
e
Аноним 02/01/18 Втр 16:00:58  1114962
>>1107098 (OP)
Был энтузиастом этой книги. И других за авторством Роберта Мартина.
Все тимлиды мне всегда говорили "малаца", когда по первому времени показывал свой код.
Но чем дальше ты углублялся в работу, тем больше осознавал, что вообще всем похуй на эти практики. И это я говорю с опытом смены 4 работ.
Аноним 02/01/18 Втр 16:04:06  1114964
>>1107121
А что сложного в написании тестов.
>юзер нажимает на кнопку
>юзер видит загрузку
>юзер видит таблику "пошёл нахуй"
Три строчки.
Аноним 02/01/18 Втр 16:29:35  1114975
>>1112749
Книготред рядом. Я для кого это всё десять лет собирал?..
Аноним 02/01/18 Втр 16:31:14  1114977
>>1114964
То що тесты должны быть написаны для каждой ветки каждого оператора условия, во как.
http://www.opennet.ru/opennews/art.shtml?num=47806
Добавлена поддержка измерения покрытия (coverage) тестовым кодом веток и методов. Покрытие ветки показывает то, какие ветки были выполнены в процессе выполнения тестов, а какие нет. Покрытие метода показывает какие методы были вызваны, а какие нет.
Аноним 03/01/18 Срд 03:06:41  1115163
>>1107098 (OP)
Про тесты смотреть сюда - https://www.sqlite.org/testing.html
Аноним 27/01/18 Суб 21:02:33  1127552
1
Аноним 27/01/18 Суб 21:19:52  1127559
>>1114964

Сколько ты напишешь тестов проверяющих деление на ноль?
Аноним 28/01/18 Вск 07:08:04  1127776
>>1127559
Уточни - тесты для функции, суть которой делить на ноль. Или просто протестировать деление на ноль, как оно себя ведёт?
Аноним 28/01/18 Вск 13:58:30  1127893
>>1127776

Функцию, типы переменных x, y => Int32 | Float | Nil.
Аноним 28/01/18 Вск 14:01:06  1127895
>>1127893

Уточнение, суть функции в делении. Задача -протестировать случаи, когда одна из переменных окажется нулем.
Аноним 28/01/18 Вск 20:04:36  1128223
>>1107098 (OP)
>как надо?
Как Макконнелл написал.
/thread
Аноним 28/01/18 Вск 23:10:25  1128341
>>1107098 (OP)
хуяк-хуяк -- самый правильный бизнес-процесс, т.к бизнесу насрать на маня-архитектуру. ему главное как можно быстро выйти на рынок, настрогать фич и заработать бабла
Аноним 29/01/18 Пнд 04:06:35  1128445
>>1128341
Для контор уровня "Ашот и сыновья".
Аноним 29/01/18 Пнд 09:23:45  1128511
>>1128445
Для лбого бизнеса важна именно скорость изменений. Чтобы не приходилось каждую фичу ждать по пол года
Аноним 31/01/18 Срд 01:50:35  1129430
>>1128511
ну, а без робастной архитектуры у тебя проект станет неподдерживаемым через сколько правок?
маняархитектура - long-term investment, если говорить на твоем (((языке)))
Аноним 31/01/18 Срд 07:16:09  1129459
>>1129430
Правило трех изменений. Если ты три раза лезешь в одно и тоже место в коде, чтобы реализовать хотелки заказчика - рефактори это место в красивое, чтобы следующие правки были быстры и легки. Если же оно работает и заказчику не надо - не влезай,не трать время.
двачер рассказывает всю правду о ТДД 31/01/18 Срд 16:57:05  1129620
> “TDD is not about good citizenship. You are not immoral if you don’t TDD. You’re not not a good looker forwarder or a protector of the future. It’s not about citizenship. TDD isn’t even about raising the quality of your code. Now TDD very often does increase the quality of teams that aren’t doing it to begin with, but that’s actually neither here nor there, because TDD isn’t about that. TDD is about more value faster.

> The other thing it’s not about? It’s not about art and it’s not about craftsmanship. It’s not about the excellence of our high standards. The reason we test drive is by test driving, we go faster. We put more value into the field faster than if we didn’t do TDD. And that is the money premise. We’re in this for the money.”

Аноним 10/03/18 Суб 22:30:55  1153175
>>1129459
Хороший совет.
Аноним 11/03/18 Вск 22:03:44  1153949
>>1110105
чё за SMT?
Аноним 13/03/18 Втр 09:42:35  1154920
Кодят быдлокодеры. Программисты пишут.
Аноним 13/03/18 Втр 12:37:32  1154965
>>1127559
По идее ровно один. Делитель = 0 -> Ожидаемое поведение (возврат нула, магического числа, эксепшон)
Аноним 14/03/18 Срд 15:31:16  1155606
>>1154920
Ага, блять. И не "последний" а "крайний", не "плавают", а "ходят", не "корабль", а "судно".
Аноним 14/03/18 Срд 21:06:00  1155811
>>1154920
Программисты программируют ебасосина
Аноним 14/03/18 Срд 21:13:11  1155817
>>1154965
а сколько нужно тестов на присвание значения переменной?
int a = 1


Топ тредов
Избранное