2008-10-02 2 views
16

Я прочитал некоторые из последних языка против языка вопросы с интересом ... Perl vs. Python, Python vs. Java, Can one language be better than another?Какой ваш язык «зависает»?

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

Ну, я так же виноват, как и следующий парень, если не больше. Здесь идет:

  • Ruby: Весь пример код рубина я вижу использует команду puts, и это своего родом детского идиша анатомического термина. Поэтому в результате я не могу серьезно воспринимать Ruby-код, хотя должен.
  • Python: В первый раз, когда я это увидел, я ухмыльнулся всем значительным пробелам. Я избегал этого в течение следующих нескольких лет. Теперь я почти ничего не могу использовать.
  • Java: Мне не нравятся идентификаторыThatLookLikeThis. Я не совсем понимаю, почему именно.
  • Lisp: У меня проблемы со всеми круглыми скобками. Вещи различной важности и цели (объявления функций, присваивания переменных и т. Д.) Не синтаксически дифференцированы, и я слишком ленив, чтобы узнать, что к чему.
  • Фортран: заглавными все болит мои глаза. Я знаю, что современный код не обязательно должен быть написан таким образом, но большинство примеров кода ...
  • Visual Basic: мне кажется, что Dim используется для объявления переменных, так как я помню добрые времена GW- BASIC, когда он был только используется для измерения массивов.

Какие языки Посмотрите прямо мне на первый взгляд? Perl, C, QBasic, JavaScript, язык ассемблера, оболочка BASH, FORTH.

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

+0

Я согласен с Python - кроме того, что я все еще избегаю этого. Я бы тоже избегал Haskell - кроме того, что он позволяет вам переопределить пробелы и использовать фигурные скобки, которые я всегда делаю. – finnw 2008-10-08 22:26:31

+0

Ну, я должен повторить, что я очень рад, что преодолел зависание пробелов на Python. :) – 2008-10-09 00:41:51

+0

Ну, использование пробелов на Python, похоже, накладывает ограничения: почему лямбда может принимать только одно утверждение? – Svante 2008-11-21 16:45:40

ответ

6

Java и его отмеченные исключения. Некоторое время я покидал Java, живя в мире .NET, а затем недавно вернулся.

Чувствую себя, иногда мое предложение throws более объемно, чем содержание моего метода.

+3

Конструктор исключений java имеет параметр «причина», поэтому вы можете выполнять цепочки исключений, чтобы предотвратить это. Вы должны бросать исключения, которые имеют отношение к уровню абстракции вашего класса. – 2009-02-22 20:34:46

2

В C/C++ меня раздражает, как существуют разные способы написания одного и того же кода.

например.

if (condition) 
{ 
    callSomeConditionalMethod(); 
} 
callSomeOtherMethod(); 

против

if (condition) 
    callSomeConditionalMethod(); 
callSomeOtherMethod(); 

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

+0

Языки не предназначены для предотвращения аргументов, они предназначены для предоставления абстракций от кода машинного уровня, чтобы сообщить компьютеру, что делать. Если вы сделаете стандарт строгим в одной ситуации, вы получите аргументы в другом месте. Пример, который вы даете, является угловым для однострочных операторов. – 2008-10-02 05:34:44

+0

Да, я согласен, что это была ситуация с угловым случаем. Он был предназначен для одного примера моего gripe («В C/C++ существуют разные способы написания одного и того же кода»). Это была не моя единственная проблема. – LeopardSkinPillBoxHat 2008-10-02 05:52:03

+6

«В C/C++ существуют разные способы написания одного и того же кода» Человек, вы когда-нибудь программировали на Perl? =) – Seiti 2008-11-03 01:53:06

3

Иногда меня раздражает то, как люди ожидают, что на всех рабочих местах будет один язык. В зависимости от задачи, которую вы выполняете, каждый язык имеет свои преимущества и недостатки. Мне нравятся языки синтаксиса на основе C, потому что это то, к чему я больше всего привык, и мне нравится гибкость, которую они склонны отдавать разработчику. Разумеется, с большой силой приходит большая ответственность, и иметь возможность писать 150 строк LINQ заявления не означает, что вы должны.

Мне нравится встроенный XML в последней версии VB.NET, хотя мне не нравится работать с VB в основном потому, что я считаю, что среда IDE менее полезна, чем IDE для C#.

32

Я ненавижу Hate HATE «End Function» и «End IF» и «If ... Then» части VB. Вместо этого я предпочел бы видеть фигурные скобки.

+0

По крайней мере, у него есть одно преимущество - вы можете видеть, какая конструкция заканчивается без поиска подходящей скобки, которая может быть в верхней части экрана. – 2008-10-25 13:12:40

+0

Множественные вложенные END IFs в VB будут иметь такую ​​же проблему ... Я склонен использовать комментарии к закрывающей фигурной скобке в коде со многими вложенными блоками, например «// end for y» и т. Д. – 2008-10-29 18:57:28

+0

Я тоже ненавижу END Funtions. Я предпочитаю синтаксис bash (if/fi, case/esac) или фигурные скобки ... – Seiti 2008-11-03 01:55:31

9

Pascal's Begin и End. Слишком многословная, не подпадающая под скобки, и, что еще хуже, нет Begin на каждые End, например.

Type foo = Record 
    // ... 
end; 
9

Хотя я в основном разработчик PHP, мне не нравятся языки, которые не позволяют мне делать достаточно много встроенных. Например:

$x = returnsArray(); 
$x[1]; 

вместо

returnsArray()[1]; 

или

function sort($a, $b) { 
    return $a < $b; 
} 
usort($array, 'sort'); 

вместо

usort($array, function($a, $b) { return $a < $b; }); 
2

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

Perl:

($lastname, $firstname, $rest) = split(' ', $fullname); 

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

+1

Да, это немного PITA в Python. Обычно я делаю что-то вроде: fields = fullname.split(); поля + = [Нет] * (len (поля) -3); фамилия, имя, отдых = поля. Определенно не так удобно. – 2008-10-02 06:38:12

+0

Точно! Делайте то, что я хочу, черт! :) – 2008-10-02 06:44:08

1

Пакеты Java. Я нахожу их сложными, тем более что я не корпорация. Я очень предпочитаю пространства имен. Разумеется, я это преодолею - я играю с Android SDK, и Eclipse удаляет много боли. У меня никогда не было машины, которая могла бы запускать ее в интерактивном режиме до этого, и теперь я очень впечатлен.

7

Синтаксис C и C++ немного причудливый. Они повторно используют операторов для разных вещей. Вы, наверное, так привыкли к этому, что вы не думаете об этом (и не я), но считают, сколько значения скобки имеют:

int main()  // function declaration/definition 
printf("hello") // function call 
(int)x   // type cast 
2*(7+8)   // override precedence 
int (*)(int)  // function pointer 
int x(3)   // initializer 
if (condition) // special part of syntax of if, while, for, switch 

И если в C++ вы видели

foo<bar>(baz(),baaz) 

вы не могли знать значения без определения foo и bar.

  • < и> может быть шаблоном экземпляра, или может быть меньше, чем и больше, чем (необычно, но правовые)
  • () может быть вызов функции, или может быть просто окружая запятой оператор (т. е. выполнить baz() для размерных эффектов, затем вернуть baaz).

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

22

Несоответствия имени функции PHP.

// common parameters back-to-front 
in_array(needle, haystack); 
strpos(haystack, needle); 

// _ to separate words, or not? 
filesize(); 
file_exists; 

// super globals prefix? 
$GLOBALS; 
$_POST; 
+0

Вау, я просто прочитал свой комментарий к примеру "// _ для разделения слов или нет?" и понял, что слово «отдельный» - хотя всегда имеет тот же смысл - произносится по-разному в двух разных контекстах. Один подобен заданию, а другой - компаратором ... Я полагаю, что английский тоже очень плохой. – 2008-10-02 07:54:21

+0

Да, я не понимаю, почему они не просто выполняют все функции, которые загрязняют глобальное пространство имен (например, strpos и т. Д.), Но также включают в себя новые классы, которые их очищают (например, класс String, класс Number, и т. д.) – cdmckay 2009-02-22 20:37:11

3

Если Microsoft пришлось изобрести еще один C++ - как язык в C# почему они не исправить ошибку Java и реализовать поддержку RAII?

+1

RAII зависит от наличия детерминированных деструкторов, которые невозможны на языке сбора мусора. – Ferruccio 2008-10-02 14:54:52

3

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

 

    DECLARE mycurse CURSOR LOCAL FAST_FORWARD READ_ONLY 
     FOR 
     SELECT field1, field2, fieldN FROM atable 

    OPEN mycurse 
    FETCH NEXT FROM mycurse INTO @Var1, @Var2, @VarN 

    WHILE @@fetch_status = 0 
    BEGIN 
     -- do something really clever... 

     FETCH NEXT FROM mycurse INTO @Var1, @Var2, @VarN 
    END 
    CLOSE mycurse 
    DEALLOCATE mycurse 
 
6

Нет ничего в мире, в котором я ненавижу больше, чем php.

  1. Переменные с $, это один дополнительный нечетный символ для каждой переменной.
  2. Доступ к членам осуществляется с помощью -> без видимых причин, одного дополнительного символа для доступа каждого участника.
  3. Freakshow языка на самом деле.
  4. Нет пространств имен.
  5. Струны объединены с ...
  6. Freakshow of language.
+0

Теперь, когда я это думаю. не может использоваться вместо ->, потому что это конкатенация ... mmm ... – asterite 2008-10-02 17:08:46

+1

И дополнительные символы ($ и>) требуют нажатия сдвига, который раздражает и увеличивает опечатки. – 2008-10-29 18:59:51

+0

PHP 5.3+ имеют пространства имен =) – Seiti 2008-11-03 01:59:41

3

Чувствительность к регистру.

Какое похмелье вам нужно думать, что отличать два идентификатора исключительно от caSE - отличная идея?

+7

В Java довольно условно назвать свои классы сначала капиталом, а ваши экземпляры в нижнем регистре. Очень часто можно увидеть что-то вроде: Person person = new Person(); – 2008-10-02 13:48:46

+3

Кажется, что каждый дизайнер языка, кроме Билла Гейтса, похмел. – Vasil 2008-10-03 07:40:59

+7

У меня совершенно противоположный вид! Мне нравится, как в Haskell чувствительность к регистру используется как часть синтаксиса (типы и конструкторы всегда заглавные, переменные всегда ниже). Я считаю, что это очень элегантно. – 2008-10-29 19:01:28

-5

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

if (a and b) 
{ 
    do something 
} 

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

Это может быть немного более многословным, но следующий однозначна ...

if (a) 
{ 
    if (b) 
    { 
     do something 
    } 
    else 
    { 
     what about this case? 
    } 
} 
else 
{ 
    if (b) 
    { 
     what about this case? 
    } 
    else 
    { 
     do something else 
    } 
} 

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

19

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

если-затем фи достаточно плохо, но дело-в ESAC только становится глупо

+2

Хе-хе, я должен согласиться с тобой по этому поводу ... и почему для и в то время как петли заканчиваются «сделанными», а не «rof» или «elihw»: -P – 2008-10-02 15:59:44

+0

«rof» было бы здорово !! – Seiti 2008-11-03 02:01:37

4

Coding Style несогласованности в командных проектах.

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

Это плохо, если вы используете разные стандарты для разных языков, но в веб-проекте с HTML, CSS, Javascript, PHP и MySQL, это 5 языков, 5 разных стилей и умножаются на количество людей, работающих на проект.

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

12

Я просто подумал о другом ... Мне не нравятся преимущественно бессмысленные URL-адреса, используемые в XML, для определения пространств имен, например. xmlns="http://purl.org/rss/1.0/"

1

Пролог if-then-else синтаксис.

x -> y ; z 

Проблема заключается в том, что «;» является «or» оператор, так что приведенные выше, выглядит как «x подразумевает y или z».

+0

Ничего себе, это действительно непостижимо! – 2008-10-06 17:20:47

0

Я ненавидел круглые скобки в Lisp и Scheme, потому что после C, C# и таких языков это казалось очень запутанным, и было не совсем ясно, как все связано. Однако теперь, когда я знаю что-то о Схеме, и это обычные правила форматирования, я бы не сказал, что мне нравится, как это работает, но, по крайней мере, я понимаю и преодолеваю свои страхи при чтении кода, написанного в CLisp/Scheme.

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

2

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

Я все еще обволакиваю свой мозг вокруг JavaScript, и в целом его в основном приемлемо. Почему так сложно создать пространство имен. В TCL они просто уродливые, но в JavaScript это на самом деле rigmarole AND совершенно нечитабельно.

В SQL, как получилось, всего лишь один, огромный оператор SELECT Freekin.

3

Ненавижу полуколоны. Я нахожу, что они добавляют много шума, и вам редко приходится помещать два вывода в строку. Я предпочитаю стиль Python и других языков ... end of line - конец инструкции.

-1

Относится к нескольким языкам: чувствительность

  1. дело - кто бы ни была идея?!(И люди, которые используют несколько словThatMeanSomething, а также несколькоwordsthatmeansomething для разных значений, должны быть сняты :)

  2. Индексирование массива, начиная с 0. Я исхожу из фона fortran, так что это еще одна причина, но в математическом массиве индексирование всегда начинается с 1 , поэтому при реализации более крупной модели он создает много головных болей (особенно при отладке).

  3. Точка с запятой - только хлам в коде. Если вы тщательно пишете код (fortran, python, ...), они вам не нужны. Если вы этого не сделаете, они не спасут вас.

  4. Фигурные скобки - см 3.

P.S. Все вы там. Не сердитесь. Если вам не нравится ответ, вы не должны спрашивать.

+1

Re: 1) Я согласен с тем, что использование различных схем обсадных колонн для дифференциации идентификаторов - это мерзость, но я также думаю, что допускать разный корпус для того же/идентификатора также может быть PITA. Я не хочу искать VARNAME, VarName, varname, VARname и т. Д. При сканировании идентификатора. – 2009-02-22 21:11:59

8

Мне нравится объектно-ориентированный стиль. Таким образом, он меня пугает на Python, чтобы увидеть len (str), чтобы получить длину строки или расщепить строки, такие как split (str, «|») на другом языке. Это хорошо в C; у него нет объектов. Но Python, D и т. Д. Имеют объекты и используют obj.method() другие места. (Я все еще думаю, что Python - отличный язык.)

Несоответствие - еще один большой для меня. Мне не нравятся несогласованные именования в одной и той же библиотеке: length(), size(), getLength(), getlength(), toUTFindex() (почему не toUtfIndex?), Constant, CONSTANT и т. Д.

Длинные имена в .NET иногда меня беспокоить. Разве они не могут каким-то образом сократить DataGridViewCellContextMenuStripNeededEventArgs? Что относительно ListViewVirtualItemsSelectionRangeChangedEventArgs?

И я ненавижу глубокие деревья каталогов. Если в библиотеке/проекте есть дерево с глубиной 5 уровней, у меня возникнут проблемы с этим.

5

Все [] s и @s в Objective C. Их использование настолько отличается от базового синтаксиса основного C, что в первый раз, когда я увидел их, это создало впечатление, что вся объектная ориентация была неуклюже прикручена, запоздалая мысль.

0

TSQL начинает & конца ... это раздражает ...

0

В большинстве языков, доступ к файлам. VB.NET - единственный язык, пока доступ к файлу имеет для меня какой-то смысл. Я не понимаю, почему, если я хочу проверить, существует ли файл, я должен использовать File.exists ("") или что-то подобное вместо создания файлового объекта (фактически FileInfo в VB.NET) и спрашивать, существует ли он. И затем, если я хочу его открыть, я прошу его открыть: (предположим, например, объект FileInfo, называемый fi) fi.OpenRead. Возвращает поток. Ницца. Именно то, что я хотел. Если я хочу переместить файл, fi.MoveTo. Я также могу сделать fi.CopyTo. Что это за глупость в том, что не делаете файлы полноценными объектами на большинстве языков? Кроме того, если я хочу перебирать файлы в каталоге, я могу просто создать объект каталога и вызвать .GetFiles. Или я могу сделать .GetDirectories, и я получаю совершенно новый набор объектов DirectoryInfo для игры.

По общему признанию, Java имеет некоторые из этих файлов, но эта глупость иметь целый объект, чтобы рассказать ему, как перечислить файлы, просто глупо.

Кроме того, я ненавижу ::, ->, => и все другие многосимвольные операторы, кроме < = и> = (и, возможно, - и ++).

3

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

Я лично предпочитаю ноль на основе, но любой язык, который смешивает эти два, или позволяет вам «настроить», который используется, может привести вас в бешенство. (Apache Velocity - я ищу в вашем направлении!)

надреза от VTL reference (по умолчанию 1, но вы можете установить его в 0):

# Default starting value of the loop 
# counter variable reference. 
directive.foreach.counter.initial.value = 1 

(попробуйте слияние 2 проектов, которые использовали различный счетчик схемы - ugh!)

0

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

  • Матрицы индексируются круглыми скобками. Итак, если вы видите что-то вроде Image (350,260), вы не знаете, получаем ли мы элемент из матрицы Image, или если мы вызываем некоторую функцию под названием Image и передаем ей аргументы.
  • Сфера сумасшедшая. Я, кажется, помню, что переменные индекса цикла остаются в области действия после окончания цикла.
  • Если вы забыли вставить точку с запятой после назначения, значение будет сброшено до стандартного вывода.
  • У вас может быть одна функция для каждого файла. Это очень раздражает для организации работы.

Я уверен, что мог бы придумать больше, если бы думал об этом.

0

[Отказ от ответственности: У меня есть только мимолетное знакомство с VB, поэтому примите мои комментарии с зерном соли]

I Hate Как все ключевые слова в VB капитализируются Like This. Я видел сообщение в блоге на другой неделе (месяц?) О том, кто пробовал писать код VB без заглавных букв (они что-то сделали для компилятора, который позволил бы им скомпилировать код VB), и этот язык выглядел намного лучше!

2

В Ruby мне очень не нравится, как методы не требуют вызова self. для текущего экземпляра, но свойства (в противном случае они будут сталкиваться с локалями); то есть:

def foo() 
    123 
end 

def foo=(x) 
end 

def bar() 
    x = foo() # okay, same as self.foo() 
    x = foo # not okay, reads unassigned local variable foo 
    foo = 123 # not okay, assigns local variable foo 
end 

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

0

У меня есть один.

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

Я думал, что C# был удивительным, пока я не начал вынуждены писать код так:

void event...(object sender,EventArgs e){ 
    int t=(int)(decimal)(MyControl.Value); //Value is an object which is actually a decimal to be converted into an int 
} 

О, и атрибуты Fugly. Могла ли Microsoft серьезно не думать ни о чем более уродливом, чем [MyAttribute(Argument)] void function... Серьезно. WTF? Даже не заставляйте меня начинать с разметки XAML.

Я не могу воспринимать Python всерьез из-за проблемы с пробелами.

Временами у меня есть проблема, принимая Рубин серьезно, потому что

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

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

О, и я также ненавижу синтаксис

if(a) 
    b(); 

. Вы не имеете ни малейшего представления о том, сколько раз я просто сделал

if(a) 
    b(); 
    c(); 

случайно с кодом, написанным так .. На самом деле это может быть хуже

if(a) 
    b(); c(); 

Единственное место, он никогда не должен быть в состоянии использовать это

if(a){ .... 
}else if(b){ ... 
6

гнушается котла пластины многословия Java.

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

Те, в связи с Конвенцией Java с помощью veryLongVariableNames, иногда мне кажется, что я вернулся в 80-е, написав IDENTIFICATION DIVISION. в верхней части моих программ.

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

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

4

В частности, нет порядка ...

OCaml

  • определения кортежей использовать * для разделения элементов, а не ,. Таким образом, ("Juliet", 23, true) имеет тип (string * int * bool).

  • Для быть такой удивительный язык, документация имеет этот навязчивый комментарий threads:. " Библиотека нитей реализуется путем разделения времени на одном процессоре он не воспользуется многопроцессорных машин с помощью этого. поэтому библиотека никогда не будет работать быстрее. "JoCaml doesn't fix this problem.

  • ^^^ Я слышал, что ребята из Jane Street работали над добавлением параллельных GC и многоядерных потоков в OCaml, но я не знаю, насколько они успешны. Я не могу представить себе язык без многоядерных потоков и GC, выживших очень долго.

  • Простой способ изучения модулей в верхнем лепестке. Конечно, вы можете написать module q = List;;, и топлевел будет с радостью распечатать определение модуля, но это просто кажется взломанным.

C#

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

  • Весь код LINQ, который я когда-либо читал, использует синтаксис метода, x.Where(item => ...).OrderBy(item => ...). Никто никогда не использовал синтаксис выражений, from item in x where ... orderby ... select. Между вами и мной, я думаю, синтаксис выражения глупо, если только по той причине, что он выглядит «чужим» на фоне всех других кодов C# и VB.NET.

LINQ

Каждого другой язык использует стандартные имена промышленности Карты, сгибание/Reduce/INJECT и фильтр. LINQ должен быть другим и использует Select, Aggregate и Where.

Функциональное программирование

монады мистифицируя. Увидев монаршу Парсера, Мода, Мода, Государство и Список, я прекрасно понимаю, как работает код; однако, как общий шаблон дизайна, я не могу смотреть на проблемы и сказать «эй, я держал пари, что монада идеально подойдет».

Рубин

GRRRRAAAAAAAH!!!!! ... Я имею в виду серьезно.

VB

Module Hangups 
    Dim _juliet as String = "Too Wordy!" 

    Public Property Juliet() as String 
     Get 
      Return _juliet 
     End Get 
     Set (ByVal value as String) 
      _juliet = value 
     End Set 
    End Property 
End Module 

И инкубационные заявления являются отравой моего существования. Хорошо, поэтому я меняю тип данных своего свойства - теперь мне нужно также изменить тип данных в моем сеттере? Почему VB не заимствует у C# и просто включает неявную переменную, называемую значением?

.NET Framework

Я лично, как Java конвенции Корпус: классы PascalCase, методы и свойства верблюжьего.

0

Я ненавижу это на Python. Я никогда не знаю, что-то есть метод на объекте или какая-то случайная функция, плавающая вокруг (см. built-in functions). Похоже, они начали делать язык объектно-ориентированным, но затем отстранялись. Для меня имеет смысл иметь такие функции как методы в каком-то базовом классе, например Object.

Я также ненавижу методы __methodName__-стиля, и если я действительно хочу, я все же могу получить доступ к частным материалам в классе извне класса.

Требования к пробелам меня беспокоят; Я не хочу, чтобы разработчик языка задавал мне код определенным образом.

Мне не нравится идеал, который идеально подходит для того, что придерживается Python. Я хочу варианты.

1

Java

  • Дженерики (Java версия шаблонов) ограничены. Я не могу вызывать методы класса, и я не могу создавать экземпляры класса. Дженерики используются контейнерами, но я могу использовать контейнеры экземпляров объекта.
  • Отсутствие множественного наследования. Если использование множественного наследования не приводит к проблеме алмаза, оно должно быть разрешено. Это должно позволить написать стандартную реализацию методов интерфейса, пример проблемы: интерфейс MouseListener имеет 5 методов, по одному для каждого события. Если я хочу обработать только один из них, я должен реализовать 4 других метода как пустой метод.
  • Он не позволяет выбирать вручную управлять памятью некоторых объектов.
  • Java API использует сложную комбинацию классов для выполнения простых задач. Например, если я хочу читать из файла, я должен использовать много классов (FileReader, FileInputStream).

Python

  • Отступ является частью синтаксиса, я предпочитаю использовать слово «конец», чтобы указать конец блока и слово «пройти» был бы не нужен.
  • В классах слово «я» не должно использоваться в качестве аргумента функций.

C++

  • Заголовки самая большая проблема. Мне нужно перечислить функции в файле заголовка и реализовать их в файле cpp. Он не может скрывать зависимости класса. Если класс A использует класс B в качестве поля, если я включаю заголовок A, заголовок B также будет включен.
  • Строки и массивы поступают из C, они не предоставляют поле длины. Трудно контролировать, будут ли std :: string и std :: vector использовать стек или кучу. Я должен использовать указатели с std :: string и std :: vector, если я хочу использовать назначение, передать в качестве аргумента функции или вернуть ее, потому что ее оператор «=» скопирует всю структуру.
  • Я не могу управлять конструктором и деструктором. Трудно создать массив объектов без конструктора по умолчанию или выбрать, какой конструктор использовать с операторами if и switch.
0

Мои зависаний с C# очень просто:

  1. Scoped блоки

Я хотел бы написать

with SomeObject 
{ 
    .Property = "Some value"; 
    .Event(); 
} 

вместо:

SomeObject.Property = "Some value"; 
SomeObject.Event(); 

Специально с Append, AppendFormat на StringBuilder это сделало бы код менее громоздким для чтения.

  1. Nulls

Я хотел бы сказать:

var result = SomeObject.SomeCollection.First().SomeProperty ??? "Default value"; 

Вместо:

string result = string.Empty; 

if (SomeObject != null && SomeObject.SomeCollection.Count() > 0) 
{ 
    result = SomeObject.SomeCollection.FirsT().SomeProperty; 
} 
else 
{ 
    result = "Default value"; 
} 

Я ненавижу NullExceptions и хотел бы иметь гладкую COALESCE нуль, который работает на нескольких уровнях.

Смежные вопросы