Как я могу тесно достигнуть?: от C++/C# в Python?

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

Другой способ - сделать все приложение, в котором вы можете тестировать, как в реальном браузере, и вы можете делать больше вещей, как это делают конечные пользователи. Эту я обычно предпочитаю, но для запуска требуется больше времени. Этому тоже понадобится JSDom. вы можете сослаться на https://airbnb.io/enzyme/docs/guides/jsdom.html , они очень хорошо документировали все различия между мелким, рендерингом и монтированием

Метод rest это монтировать, монтирование немного выше, чем мелкое и проще, чем рендеринг, и вы можете использовать его, когда хотите протестировать componentdidmount.

9
задан Jon Seigel 4 April 2010 в 07:18
поделиться

9 ответов

В Python 2.5, существует

A if C else B

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

stringValue = otherString or defaultString
23
ответ дан 4 December 2019 в 07:49
поделиться

@Dan

if otherString:
   stringValue = otherString
else:
   stringValue = defaultString

Этот тип кода длиннее и более выразителен, но также и более читаем

Хорошо да, это длиннее. Не настолько уверенный в “более выразительном” и “более читаемый”. По крайней мере Ваше требование спорно. Я даже пошел бы до высказывания, что это совершенно неправильно по двум причинам.

Во-первых, Ваш код подчеркивает принятие решений (скорее чрезвычайно). С другой стороны, условный оператор подчеркивает что-то еще, а именно, значение (resp. присвоение упомянутого значения). И это точно, что хочет писатель этого кода. Принятие решений является действительно скорее побочным продуктом кода. Важная часть здесь является операцией присвоения. Ваш код скрывает это присвоение в большом количестве синтаксического шума: ветвление.

Ваш код менее выразителен, потому что он смещает акцент от важной части.

Даже затем Ваш код, вероятно, превзошел бы некоторое неясное ASCII-творчество как ?:. Встроенное -if было бы предпочтительно. Лично, мне не нравится вариант, начатый с Python 2.5, потому что это назад. Я предпочел бы что-то, что читает в том же потоке (направление) как тернарный оператор C, но использует слова вместо символов ASCII:

C = if cond then A else B

Это без труда побеждает.

C и C#, к сожалению, не имеют такого выразительного оператора. Но (и это - второй аргумент), троичный условный оператор языков C так долго устанавливается, что это стало идиомой сам по себе. Тернарный оператор является таким же количеством части языка как “стандартное” if оператор. Поскольку это - идиома, кто-либо, кто знает, что язык сразу читает это право кода. Кроме того, это - чрезвычайно короткий, краткий способ выразить их семантика. На самом деле это - самый короткий вообразимый путь. Это чрезвычайно выразительно, потому что это не затеняет сущность с бесполезным шумом.

Наконец, Jeff Atwood записал идеальное заключение в это: лучший код не является никаким кодом вообще.

5
ответ дан 4 December 2019 в 07:49
поделиться

Между прочим, j0rd4n, Вы не делаете (не делайте!) пишут код как это в C#. Кроме того, что IsDefaultOrNull на самом деле назван IsNullOrEmpty, это - чистое чрезмерное увеличение размера кода. C# предлагает объединить оператор для ситуаций как они:

string stringValue = otherString ?? defaultString;

Это верно, что это только работает если otherString null (а не пустой), но если это может быть обеспечено заранее (и часто это может) это делает код намного более читаемым.

0
ответ дан 4 December 2019 в 07:49
поделиться

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

result = question and firstanswer or secondanswer

С протестом, что это не работает как тернарный оператор, если firstanswer является ложью. Это вызвано тем, что вопрос оценен сначала, предположив, что это - истинный firstanswer, возвращается, если firstanswer не является ложью, таким образом, этому использованию не удается действовать как тернарный оператор. Если Вы знаете значения, однако, обычно нет никакой проблемы. Пример был бы:

result = choice == 7 and "Seven" or "Another Choice"
-1
ответ дан 4 December 2019 в 07:49
поделиться

Это никогда не плохая вещь написать читаемый, выразительный код.

if otherString:
   stringValue = otherString
else:
   stringValue = defaultString

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

1
ответ дан 4 December 2019 в 07:49
поделиться

При использовании рубина Вы могли бы записать

stringValue = otherString.blank? ? defaultString : otherString;

встроенный blank? метод означает пустой или пустой.
Приезжайте в темную сторону...

-1
ответ дан 4 December 2019 в 07:49
поделиться

Я также обнаружил, что просто использование "или" оператор делает вполне прилично. Например:

finalString = get_override() or defaultString

Если get_override () возвратится "" или Ни один, то он будет всегда использовать defaultString.

0
ответ дан 4 December 2019 в 07:49
поделиться

Глава 4 diveintopython.net содержит ответ. В Python это называется трюк и / или.

0
ответ дан 4 December 2019 в 07:49
поделиться

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

Во-первых, обратите внимание, что более простым подходом может быть этап инициализации после создания, затем вы можете использовать обобщения:

static T Create<T>({args}) where T : class, ISomeInitInterface, new() {
    T t = new T();
    t.Init(args);
    return t;
}

Затем вы можете использовать MakeGenericMethod и / или CreateDelegate .


В противном случае; вы можете сделать это «на лету» с помощью Expression (3.

1
ответ дан 4 December 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: