Re[6]: Как объяснить падение популярности .net?
От: Mamut Швеция http://dmitriid.com
Дата: 11.12.19 16:06
Оценка: +6
Z>кстати, отличный пример. попробуешь переписать подобное в сишарпе?

Что в нем отличного? Бессмысленное нагромождение синтаксиса ради синтаксиса, весьма нечитаемое.

Вот пример C#:

var response = await httpClient.GetAsync(url);
if (!response.IsSuccessStatusCode){
   <вызов любого async кода>
   return;
}


dmitriid.comGitHubLinkedIn
Re[7]: Как объяснить падение популярности .net?
От: zverjuga Беларусь  
Дата: 11.12.19 16:12
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Вот пример C#:


он не соответствует исходному примеру.

1. нет приведения response к HTTPURLResponse с соответствующей проверкой на валидность
2. коды должны быть в диапазоне от 200 до 299. а не IsSuccessStatusCode
проклятый антисутенерский закон
Отредактировано 11.12.2019 16:15 zverjuga . Предыдущая версия .
Re[8]: Как объяснить падение популярности .net?
От: Mamut Швеция http://dmitriid.com
Дата: 11.12.19 16:16
Оценка:
Z>он не соответствует исходному примеру.

Он полностью ему соответсвует. То, что Swift не осилил внятный API для HTTP-клиента, это проблема криворукости его разработчиков. Там вообще весь Foundation это яркий пример того, как делать не надо. Чтение и запись файлов я показывал, да.


dmitriid.comGitHubLinkedIn
Re[9]: Как объяснить падение популярности .net?
От: zverjuga Беларусь  
Дата: 11.12.19 16:21
Оценка:
Здравствуйте, Mamut, Вы писали:

Z>>он не соответствует исходному примеру.


M>Он полностью ему соответсвует. То, что Swift не осилил внятный API для HTTP-клиента, это проблема криворукости его разработчиков. Там вообще весь Foundation это яркий пример того, как делать не надо. Чтение и запись файлов я показывал, да.


причем тут hhtpClient? где ты его в примере вообще увидел? у тебя есть response непонятного типа, который должен быть приведен к HTTPURLResponse + проведена проверка. откуда ты знаешь, как ты вообще этот response получил? это может быть параметр в функции типа AnyObject.

ну и проверку кодов на требуемый диапазон ты тоже упустил. есть конкретные значения, каким боком ты здесь IsSuccess приплел?
проклятый антисутенерский закон
Отредактировано 11.12.2019 16:22 zverjuga . Предыдущая версия .
Re[10]: Как объяснить падение популярности .net?
От: Mamut Швеция http://dmitriid.com
Дата: 11.12.19 16:47
Оценка: 1 (1) +2
Z>причем тут hhtpClient? где ты его в примере вообще увидел?

Да ты что, response, приводимый к типу HTTPURLResponse и проверяемый на успешный status code вообще никакого отношения ни к HTTP ни к клиентам не имеет, ты что.

Z> у тебя есть response непонятного типа, который должен быть приведен к HTTPURLResponse + проведена проверка. откуда ты знаешь, как ты вообще этот response получил? это может быть параметр в функции типа AnyObject.


ага. какой-то сферовакуумный код, в котором неизвестно откуда взявшийся response внезапно надо срочно привести к HTTPURLResponse. Нет конечно. Все это — результат убогого до невозможности API Свифта (что ты там ныл про отсутсвие «нормальных асинхронных HTTP API в Андроиде»?)



// начало вызова комменти ровать не будем, 
// отсылка JSON'а немного писец во всех языках
let request = ...;

let task = URLSession.shared.dataTask(with: request, completionHandler: { data, response, error -> Void in
    // в этом говне переменные могут быть nil, 
    // а проверить на nil через if x == nil в общем случае нельзя. 
    // только присваиванием
    // потому что == требует наличия Equatable у любого объекта
    // компилятор решить эту проблему не может, видать. 
    // Но говно с точки зрения зверюги — это почему-то C# и Java, а не Swift
    if let error = error {
        return
    } 

    // жрем еще говна прекрасным дизайном API
    // потому что согласно зверюге, в красивом API ответ от 
    // хттп-клиента может быть чем угодно, например, AnyObject
    // а работать с этим прекрасным асинхронным API надо вприсядку, 
    // выполняя все действия вручную
    guard let httpResponse = response as? HTTPURLResponse,
        (200...299).contains(httpResponse.statusCode) else {
        return
    }

    // почему так? Потому что убогое убожество Swift
    // неспособно привести одно к другому, а из него достать третье
    // у response тип URLResponse? поэтому надо привести к HTTPURLResponse? через as?
    // а через что же еще. Больше! Больше доп. синтаксиса! Это не как в C#/Java, это другое
    // тут все кривые расширения и добавления синтаксиса, согласно зверюге, это благо
    // и программисты все поймут
    //
    // Но достать из результата приведения value не получится, потому что ? — это скрытый Optional
    // и надо его сначала "unwrap" через ! (аналог .get() в Java)
    // и результат тоже Optional. Его тоже надо распаковать!
    token = (response as? HTTPURLResponse)!.value(forHTTPHeaderField: "x-set-authentication")!
})


теперь сравним это с абсолютно аналогичным кодом на C#

var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);

if (response.IsSuccessStatusCode) {
   // единственный неочевидный момент
   // для кастомных заголовков надо вытягивать их вручную
   // вместо First можно или FirstOrDefault() для обработки случая, 
   // если заголовка нет
   httpResponseMessage.Headers.GetValues("x-set-authentication").First();
}


dmitriid.comGitHubLinkedIn
Re[10]: Как объяснить падение популярности .net?
От: Flem1234  
Дата: 11.12.19 16:53
Оценка: +1
Здравствуйте, zverjuga, Вы писали:

Z>Здравствуйте, Mamut, Вы писали:


Z>причем тут? где ты его в примере вообще увидел? откуда ты знаешь, как ты вообще получил?

Z>ну и ты тоже упустил.

Неразумно спорить о мелких деталях синтаксиса.

Можешь хотя бы в нескольких пунктах сформулировать, чем свифт лучше? Ну, например, шарп лучше некоторого условного языка Х тем, что
есть async/await и не надо колбеки с конечными автоматами руками писать
есть линк и можно писать типизированные запросы ко внешним источникам данных, в частности к реляционным БД
есть возможность обобщенно и безопасно работать с областями памяти разного типа — на стеке и т.д., что дает возможность перфоманс оптимизировать

А что может свифт?
Re[10]: Как объяснить падение популярности .net?
От: std.denis Россия  
Дата: 11.12.19 17:04
Оценка: +2
Z>ну и проверку кодов на требуемый диапазон ты тоже упустил. есть конкретные значения, каким боком ты здесь IsSuccess приплел?
IsSuccessStatusCode как раз и выполняет проверку на то, что код в диапазоне 200..299
Re[11]: Как объяснить падение популярности .net?
От: std.denis Россия  
Дата: 11.12.19 17:20
Оценка: -1
M>ага. какой-то сферовакуумный код, в котором неизвестно откуда взявшийся response внезапно надо срочно привести к HTTPURLResponse. Нет конечно. Все это — результат убогого до невозможности API Свифта (что ты там ныл про отсутсвие «нормальных асинхронных HTTP API в Андроиде»?)
Но тут ты сам взял вбросил какой-то говнокод и на его основе начал хаять язык.
К тому же ты зачем-то обсуждаешь API операционки, а пытаешься создать вид, что проблема в языке

M> // а проверить на nil через if x == nil в общем случае нельзя.

M> if let error = error {
чушь и неправда

M> // жрем еще говна прекрасным дизайном API

M> // потому что согласно зверюге, в красивом API ответ от
M> // хттп-клиента может быть чем угодно, например, AnyObject
бред. речь шла о языке, ты нафига-то притянул сюда API операционки. есть нормальные библиотеки, в стиле swift

M> // почему так? Потому что убогое убожество Swift

M> // неспособно привести одно к другому, а из него достать третье
M> // у response тип URLResponse? поэтому надо привести к HTTPURLResponse? через as?
M> // а через что же еще. Больше! Больше доп. синтаксиса! Это не как в C#/Java, это другое
больше демагогии и говнокода в качестве примера дерьмовости языка

M> // и надо его сначала "unwrap" через ! (аналог .get() в Java)

M> // и результат тоже Optional. Его тоже надо распаковать!
нет, просто надо нормально писать код. у меня в проектах линтер настроен на блокировку force unwrapping, и совершенно не портит жизнь.
Re[6]: Как объяснить падение популярности .net?
От: · Великобритания  
Дата: 11.12.19 17:32
Оценка:
Здравствуйте, zverjuga, Вы писали:

M>>
M>>guard let httpResponse = response as? HTTPURLResponse,
M>>    (200...299).contains(httpResponse.statusCode) else {
M>>        DispatchQueue.main.async {
M>>            self.authenticationDidFail = true;
M>>        }
M>>        return
M>>    }
M>>


Z>кстати, отличный пример. попробуешь переписать подобное в сишарпе?

Какие-то непонятки с типами as?. Глобальные переменные "DispatchQueue.main". И непонятно кто такой self.
На java будет что-то типа
if (!response.isSuccessful()) {
    //послать сообщение в очередь? Или я не понял что там делается?
    queue.add(new AuthenticationDidFail (true));
}
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: Как объяснить падение популярности .net?
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.12.19 17:42
Оценка: +1 :))
Здравствуйте, zverjuga, Вы писали:

Z>Здравствуйте, Mamut, Вы писали:


M>>Или вот эти прекрасные конструкции:


M>>
M>>guard let httpResponse = response as? HTTPURLResponse,
M>>    (200...299).contains(httpResponse.statusCode) else {
M>>        DispatchQueue.main.async {
M>>            self.authenticationDidFail = true;
M>>        }
M>>        return
M>>    }
M>>


Z>кстати, отличный пример. попробуешь переписать подобное в сишарпе?

А в чем затык?
if(response is HTTPResponse httpResponse && (200..300).Contains(httpResponse.statusCode))
 return
else
  DispatchQueue.Main.ExecuteAsync(()=>{self.authenticationDidFail = true;})
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Как объяснить падение популярности .net?
От: CreatorCray  
Дата: 11.12.19 19:11
Оценка: +1
Здравствуйте, IID, Вы писали:

IID>Андроид пробил отметку в 90%.

Да пожалуйста. Вот только денег iOS аппы приносят больше.

... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[8]: Как объяснить падение популярности .net?
От: CreatorCray  
Дата: 11.12.19 19:11
Оценка: +2
Здравствуйте, IID, Вы писали:

IID>1) Флагманы андроидные не сильно дешевле, а иногда и дороже.

А какая разница девелоперу под ведроид сколько стоит флагман? Его интересует платежеспособность аудитории, для которой он пишет.

IID>А самое главное — какая корреляция между бюджетностью телефона и его отдачей ?

IID>Правильно, никакой.
Прямая. Какие аппы там будут хорошо работать а какие не потянет. Ну и в целом платежеспособность/готовность покупать у людей с бюджетными моделями как правило ниже.

IID>Славно пригорело.

Это просто ты не понимаешь о чём рассуждаешь.

IID>Речь о рыночной доле телефонов. И да — доля эпла только снижается.

Пофигу. Интересует денежный выхлоп этой доли.

IID>Причём тут доходы мобильных приложений?

Это доходы разработчиков приложений.

IID>Когда эплобою возразить хочется, но нечем, он начинает хвастаться как качественно его умеют доить.

Пригорает?
У меня всю жизнь ведроид межжупрочим
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[4]: Как объяснить падение популярности .net?
От: CreatorCray  
Дата: 11.12.19 19:11
Оценка:
Здравствуйте, Socrat, Вы писали:

S>А под iOS .NET?

Тут я хз, впрочем не слышал ничего про такое.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[3]: Как объяснить падение популярности .net?
От: CreatorCray  
Дата: 11.12.19 19:11
Оценка:
Здравствуйте, TimurSPB, Вы писали:

S>>В последнее время выстрелили мобильные предложения. А там рулит Ява.

TSP>В геймдеве популярен Unity. А там C#

Для сравнительно небольших проектов. Потом упираются в ресурсы.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[5]: Как объяснить падение популярности .net?
От: CreatorCray  
Дата: 11.12.19 19:11
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>"синтаксический оверхед"
Автор: Сергей Губанов
Дата: 09.06.05
— это локальный мем


Кстати любопытно как поживает и чем теперь занимается автор сего мема.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[11]: Как объяснить падение популярности .net?
От: zverjuga Беларусь  
Дата: 11.12.19 19:50
Оценка: -4
Здравствуйте, Flem1234, Вы писали:

F>Можешь хотя бы в нескольких пунктах сформулировать, чем свифт лучше? Ну, например, шарп лучше некоторого условного языка X

F>А что может свифт?

пример выше показал то, что умеет делать свифт. и делает он следующие вещи

1. приводит объект из одного типа в другой с проверкой
2. поиск совпадения из заданного диапазона
3. вызов кода в главном потоке

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

guard let foo = someObject as? ConcreteClass,
    (200...299).contains(foo.someValue) else {
        DispatchQueue.main.async {
            self.authenticationDidFail = true
        }
        return
    }


переписанный код на сишарпе будет таким
var foo = someObject as ConcreteClass;
var array = Enumerable.Range(200, 299).ToArray();
if (foo == null || !array.Contains(foo.someValue)) {
    // запустить в главном потоке код
    // self.authenticationDidFail = true
}



то есть, конструкция
guard let foo = ...


в данном примере одновременно объединяет в себе и приведение типов и проверку на нуль. в данном пример + еще и проверку на совпадение в заданном диапазоне. и если любое из двух условий не было выполнено, то выполняется блок else, где из главного потока вызвается
self.authenticationDidFail = true


опять так, сравниваем синтаксис создания списка по заданному диапазону в свифте
(200...299)


против сишарпа

Enumerable.Range(200, 299)


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

и это только одна конкретная мелочь, коих в свифте, конечно же, можно привести полно. когда проект большой, то таких мелочей вагон и ты начинаешь чувствовать их мощь и удобство. потому каждый раз говорить одно и то же реально задолбало.
проклятый антисутенерский закон
Отредактировано 11.12.2019 20:05 zverjuga . Предыдущая версия . Еще …
Отредактировано 11.12.2019 20:05 zverjuga . Предыдущая версия .
Отредактировано 11.12.2019 19:51 zverjuga . Предыдущая версия .
Re[4]: Как объяснить падение популярности .net?
От: Klikujiskaaan КНДР  
Дата: 11.12.19 19:58
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, TimurSPB, Вы писали:


S>>>В последнее время выстрелили мобильные предложения. А там рулит Ява.

TSP>>В геймдеве популярен Unity. А там C#

CC>Для сравнительно небольших проектов. Потом упираются в ресурсы.


Какие проекты сравнительно небольшие?
Re[12]: Как объяснить падение популярности .net?
От: Klikujiskaaan КНДР  
Дата: 11.12.19 20:13
Оценка:
Здравствуйте, zverjuga, Вы писали:

Z>переписанный код на сишарпе будет таким


Z>var foo = someObject as ConcreteClass;

Z>var array = Enumerable.Range(200, 299).ToArray();

Зачем тут .ToArray()?

Z>if (foo == null || !array.Contains(foo.someValue)) {

Z> // запустить в главном потоке код

А в каком он по твоему запустится?

Z> // self.authenticationDidFail = true

Z>}


Z>я уже и не помню, как в сишарпе одной строкой запустить код в главном потоке, потому опустил эту часть.


Так может сначала нужно разобраться в критикуемом?

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


Пока не видно никакой пользы, а создавать вручную диапазон HTTP Codes для проверки на Success и кичиться этим — это от большого ума (нет).
Re[5]: Как объяснить падение популярности .net?
От: CreatorCray  
Дата: 11.12.19 20:28
Оценка:
Здравствуйте, Klikujiskaaan, Вы писали:

K>Какие проекты сравнительно небольшие?


https://unity3d.com/games-made-with-unity
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[6]: Как объяснить падение популярности .net?
От: Klikujiskaaan КНДР  
Дата: 11.12.19 20:30
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Klikujiskaaan, Вы писали:


K>>Какие проекты сравнительно небольшие?


CC>https://unity3d.com/games-made-with-unity


Battletech и Escape from Tarkov — это небольшие проекты?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.