Перейти к публикации
  • Сейчас на странице   Всего пользователей: 3   (0 пользователей, 3 гостя)

Rooster

Программирование, т. 7

  

536 пользователей проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

В настоящем яп будет полноценный паттерн матчинг :trollface:

деструктуризация точнее

 

сори но

ur brn is brkn

 

Можно поподробней? 

 

твоя мозг есть сломан


 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение

 

 

твоя мозг есть сломан


Сильный аргумент, так держать!!! 

Поделиться сообщением


Ссылка на сообщение

запихивать все в один метод а потом разгребать с обоих сторон - это классический антипаттерн

который опять же применим только если у тебя кодовая база = скрипт деплоя приложения типа тудулиста


 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
(изменено)

К чему ты это написал? Ты сделал ответ на один мой ответ, а сейчас пишешь за что-то другое...


Изменено пользователем fessnik

Поделиться сообщением


Ссылка на сообщение

он просто утверждает, что это говнокод

 

хотя тут даже утверждать не надо, видно невооруженным глазом

Drakonian понравилось это

Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение
(изменено)

короче

вы когданибудь мерджили кодовую базу над которой работает одноверменно 6-10 программистов?

 

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

 

при ее отсутствии тебе придется написать гору тестов чтобы это как-то автоматом проверить

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

 

ну вот, у нас проект щас без автотестов (ни юнит, ни селениум - ничего)

и я крайне благодарен статической типизации когда призоходится сливать две гигансткие фичи + одновременный рефакторинг. компилятор решает 99% проблем и посути является тестами из коробки

 

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


В php framework Laravel, есть метод cache(), работает он так

Есть метод cache()
1. cache() - если вызвать его без аргументов, вернется экземпляр CacheManager
2. cache(‘test’) - если вызывать со одним аргументом и это строка, то получим элемент из кеша у которого ключ test, если его нет то вернется null.
3. cache([‘test’ => ‘prodota_naxuy]) - если передать первым аргументом массив, то создаться элемент кеша test, со значением prodota_naxuy

JJ0od8XTRHml3hKeeDn9-A.png





Как это будет выглядеть на языке с статической типизацией?

в норм языке с паттерн матчингом это могло бы выглядеть какнибудь так

def cache = match {
    case () => cachemanager
    case key: String => get(key)
    case (key,value) => put(key,value)
}
 
 

Изменено пользователем Just.Doit

 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение

 

 

вы когданибудь мерджили кодовую базу над которой работает одноверменно 6-10 программистов?


Да

 

компилятор решает 99% проблем и посути является тестами из коробки

 

 

99% сильно преувеличено, я могу ошибаться, но какие проблемы он решает? Не того типа данные в переменной/забыл запятую, точку с запятой/прочее.?
Это ж далеко не все возможные проблемы приложения

Поделиться сообщением


Ссылка на сообщение

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

 

а с динамической типизацией похуй, ошибка всё та же, вот только ее не видно, пока не запустишь каждый метод


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

Да, я это и имел ввиду, но врядли у тебя эта переменная будет вызываться в миллионе мест проекта, обычно это в пределах одного метода/класса. 
В любом случае два клике в среде разработки и поменял сразу во всем проекте. Безусловно это плюс компилятора, но явно не  99% )

Поделиться сообщением


Ссылка на сообщение
(изменено)

я говорил не про авторефакторинг в иде

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

 

а в версии старого интерфейса - нового еще нет

 

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

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

и это решается только тестированием 

 

а с хорошим статическим анализатором (компилятор) - это все отлавливается в 2 счета, и обычно в разы быстрее юнит тестов

 

PS: ясно понятно что "такого быть не должно"

но от человеческих ошибок никто не застрахован


Изменено пользователем Just.Doit

 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение

Всегда лучше знать, что принимает функция, hui или pizda

Но функция, которая делает разные вещи возвращая hui/pizda/skovoroda это пиздец

Поделиться сообщением


Ссылка на сообщение
(изменено)

 

 

при мердже в вашем js все смерджится без конфликтов
 

А у тебя не смержится и выдаст ошибку? Или все же смержится,а уже потом компилятор нахуй пошлет?
Изменено пользователем fessnik

Поделиться сообщением


Ссылка на сообщение
(изменено)

Что "это" возвращать обьект или гетит элемент? Ты наверно про объект. Так это ж гениальное cache() - обьект, cache('test') геттер - мего компактный и понятный код

да что-угодно, но лишь бы одно

1) компаткный - нет, ты не выигрываешь по компактности если объеденяешь функции, ни в её исходнике, ни в её использовании. отсутствие ->get или суффикса _get в названии функции посреди уже существующей строки тебе ничего не выигрывает. более того - в исходнике ты ещё и городишь какой-то пиздец для того чтоб ифать аргументы и понять какого хрена тебе надо в этот конкретный раз делать, до компактности тут довольно далеко

 

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

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

для ООП есть SOLID где первый же пункт это Single responsibility principle для классов, чтоб один класс не делал кучу разной хуйни. например чтоб ты знал что инстанция кешменеджера отвечает только за работу с кешем, менеджит его, тоесть по сути чтоб по одному названию была на 95-100% понятна зона ответственности класса. а не чтоб потом выяснилось что он за компанию ещё и из базы данных чето таскать будет, удобно же

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

 

но согласись написать скрипт деплоя строк на 10 (хотя лол, у нас простенький скрипт и то строк на 100) - удобнее на динамической и или слабой

я думаю ты путаешь типизацию языка с тем что он скриптовый

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

то что в питоне я делаю за 15-20 строк из которых половину я скопипастил с прошлого раза когда подобное делал в сшарпе во-первых было бы дольше, во-вторых это надо ещё билдить, у тебя бинарник отдельно от исходника захламляет папки етц

точно так же 15-20 строчники на винде предпочитаю делать на vbs

 

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

 

 

при мердже в вашем js все смерджится без конфликтов

 

А у тебя не смержится и выдаст ошибку? Или все же смержится,а уже потом компилятор нахуй пошлет?

 

второе, он имел ввиду что мердж в его случае ломает билд
Изменено пользователем TheDeadSkin

Поделиться сообщением


Ссылка на сообщение

давайте поговорим о кортежах

о чистых кортежах, а не просто о структурах данных с известными типами объектов и прочим

часто ли вы его юзаете и вообще как понимаете/определяете тут нужен кортеж, а тут список, а тут сет например  :trollface:


:buba:

ни мало ни много, а много и мало

Поделиться сообщением


Ссылка на сообщение

давайте поговорим о кортежах

о чистых кортежах, а не просто о структурах данных с известными типами объектов и прочим

часто ли вы его юзаете и вообще как понимаете/определяете тут нужен кортеж, а тут список, а тут сет например  :trollface:

найс байт на джунов


 

<< твой комментарий очень важен для форума.

Поделиться сообщением


Ссылка на сообщение
(изменено)

мульти-возвраты, передача связанных друг с другом групп элементов

по сути всё

 

public abstract void GenerateData(string sourceFile, string code, int tcase, (int, int, int)[] missingBlocks, (int, int) rowRange, (int, int) columnRange);
по сути последние три аргумента

массив int-int-int, и потом дважды int-int

 

плюсы

+ не спамишь юзлессными классами которые будут всё-равно совпадать с названием переменной

+ сразу видно из чего состоит тип

+ edit: забыл, удобный конструктор (val1, val2, val3) >>> new ClassName(val1, val2, val3)

+ edit2: и деструктор тоже, (int val1, int val2, int val3) = myTuple;

 

минусы

- .Item1 .Item2 это уродлийвый способ из них чето доставать

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

 

тут нужен кортеж, а тут список, а тут сет например :trollface:

не, ну этот вопрос как раз мимо, эти типы данных не связаны друг с другом

кортежи это замена аноннимным классам, классам, структурам

 

кортежи имеют 1) compile-time константное кол-во элементов 2) они упорядочены

ни списки ни сеты не умеют в это, если оно тебе надо

ты не опишешь range как <int, int> index, size через сет/список (список ещё можно, но это всё-равно маразм) из этих типов, только кортеж/класс/структура (только там порядок заменяется названиями, по сути главная разница)

 

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


Изменено пользователем TheDeadSkin

Поделиться сообщением


Ссылка на сообщение
(изменено)

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

ну плюс кортежей же еще в том, что они не изменяемы в рантайме, потому что мы заранее определили размер и типы

другое дело что в джавке нет встроенных кортежей и люди пишут

public class Tuple<K,V> {
  private K;
  private V;
public(K,V) {
this.K = K;
this.V= V;
}

//getters
}

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

public class Tuple {
  private string key;
  private string value;
public(string key, string value) {
this.key = key;
this.value= value;
}

//getters
}

самый очевидный кортеж в джавке вроде Pair

 

ведь если подумать, то любая структура - кортеж? любая функция принимает кортеж  :trollface:


Изменено пользователем choojoykin

:buba:

ни мало ни много, а много и мало

Поделиться сообщением


Ссылка на сообщение

мерж сделал, в иде все красное

git reset --hard HEAD~1

мержишь заново

Поделиться сообщением


Ссылка на сообщение

Ебать Рустер овнит, чуваки хотели доебаться до богоподобного жээса, а там ЕС6 подвезли, и чота словами великих 

РОФЛАН ЕБАЛО НА ВСЕ ЕБАЛО

 


Я не человек, Я - Кантона. (с)

Miraxes#2986

753357.png

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...