Вызывающие методы внутри, если () - C#

используйте google Guava и делайте это в двух строках:

import java.util.Map;
import com.google.common.base.Splitter;

public class Parser {
    public static void main(String... args) {
        String uri = "https://google.com.ua/oauth/authorize?client_id=SS&response_type=code&scope=N_FULL&access_type=offline&redirect_uri=http://localhost/Callback";
        String query = uri.split("\\?")[1];
        final Map<String, String> map = Splitter.on('&').trimResults().withKeyValueSeparator("=").split(query);
        System.out.println(map);
    }
}

, который дает вам

{client_id=SS, response_type=code, scope=N_FULL, access_type=offline, redirect_uri=http://localhost/Callback}
13
задан Erik Funkenbusch 23 February 2009 в 21:58
поделиться

10 ответов

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

инверсия работает на эти | operator, где, даже если левое условие оценивает к true, правое условие будет оценено также.

21
ответ дан 1 December 2019 в 17:51
поделиться

Нет, нет ничего неправильно с вызовами метода в если условие. На самом деле это может быть отличным способом сделать Ваш код более читаемым!

, Например, это намного более чисто для записи:

private bool AllActive()
{
    return x.IsActive && y.IsActive && z.IsActive;
}

if(AllActive())
{
    //do stuff
}

, чем:

if(x.IsActive && y.IsActive && z.IsActive)
{
    //do stuff
}
19
ответ дан 1 December 2019 в 17:51
поделиться

Столь же полезный, как они, упорядочьте точки, может сбивать с толку. Если Вы действительно не понимаете, что, не ясно, что в Method2 () нельзя было бы зайти все. Если бы, с другой стороны, Вам были нужны ОБА метода, которые назовут, И они должны были возвратить true, что Вы записали бы? Вы могли пойти с

bool result1 = Method1();
bool result2 = Method2();
if (result1 && result2)
{
}

, или Вы могли пойти с

if (Method1())
    if (Method2())
    {
    }

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

2
ответ дан 1 December 2019 в 17:51
поделиться

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

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

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

2
ответ дан 1 December 2019 в 17:51
поделиться

Не должно быть никакой проблемы.

нормальное поведение состоит в том, что Method1 () выполнится, и если это возвратится, то истинный Method2 () выполнится, и в зависимости от того, какой Method2 () возвраты, Вы можете / может не войти если () оператор.

Теперь, это принимает , что компилятор генерирует код, который выполняет тот путь. Если Вы хотите быть абсолютно уверены , что Method2 () не выполняется, если Method1 () не возвращает true, Вы могли записать это как это

if( Method1() )
{
  if( Method2() )
  {
    // do stuff if both methods returned TRUE 
  }
}

, Но, я всегда замечал, что Ваш код будет работать как ожидалось, таким образом, это будет, вероятно, не необходимо.

1
ответ дан 1 December 2019 в 17:51
поделиться

Nothin' неправильно.

На самом деле... Я не назвал бы их Method1 и Method2. Что-то более описательное. Возможно, пассивное звучание также (как StuffHasHappened или DataHasLoaded)

0
ответ дан 1 December 2019 в 17:51
поделиться

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

1
ответ дан 1 December 2019 в 17:51
поделиться

Взгляды, хорошие мне, но существуют некоторые протесты... Это не вид вещи, где всеохватывающие нормы применяются.

Мой инструкции :

  • , Если имена методов коротки, и нет слишком многих из них, то это - вся польза.
  • , Если у Вас есть слишком много операторов/вызовов метода в if оператор, Вы, скорее всего, сравниваете больше чем один "набор" вещей. Повредите те "наборы" и представьте временные переменные.
  • "Слишком многие" субъективны, но обычно больше, чем приблизительно 3
  • , Когда я говорю "имена методов, коротки", я говорю не примерно имена, но параметры, которые они берут также. В основном усилие, необходимое, чтобы кто-то считал его. Например if( Open(host) ) короче, чем if( WeCouldConnectToTheServer ). Общий размер всех этих объектов - то, к чему он сводится.
0
ответ дан 1 December 2019 в 17:51
поделиться

Лично, я полагал бы

if(Method1() && Method2())
{
    // do stuff if both methods returned TRUE
}

быть плохой практикой. Да, это работает в текущей среде, но так делает

if(Method1())
{
  if (Method2())
  {
    // do stuff if both methods returned TRUE
  }
}

, Но это будет работать во ВСЕХ средах? Будет будущее, возможно не-Microsoft, компиляторы C# прокладывают себе путь? Что, если Ваше следующее задание включает другой язык, где оба метода будут всегда называть? Я не полагался бы на ту конкретную конструкцию, не потому что это неправильно, но потому что это не решает серьезной проблемы, и это может стать неправильным в будущем

-2
ответ дан 1 December 2019 в 17:51
поделиться

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

2
ответ дан 1 December 2019 в 17:51
поделиться
Другие вопросы по тегам:

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