очистка повторного кода, который использует возврат - PullRequest
1 голос
/ 18 ноября 2011

У меня много функций (funcOne, funcTwo, etc.), все они в начале используют один и тот же блок проверок (я хочу переместить эти блоки в отдельную функцию или что-то еще, поэтому я не повторяю код, но проблема в том, чточто я использую return. Пожалуйста, продолжайте читать)

Если все проверки пройдены, функция переходит к определенному коду функции.

Я хочу переместить эти проверки в отдельную функцию.Но проблема в том, что я использую return;, который будет возвращаться из новой функции, но не будет возвращаться из funcOne and funcTwo.Может ли кто-нибудь помочь мне реорганизовать этот код, чтобы мне не приходилось повторять повторяющиеся проверки в каждой функции, которая их использует.

protected function funcOne(event:MouseEvent):void
{
   if( check 1 doesn't pass){
      Alert.show("error 1, returning);
      return;
   }
   if( check 2 doesn't pass){
      Alert.show("error 2, returning);
      return;
   }
   .... more checks here, all of them return specific messages 

   //if all checks pass
   //execute the specific code of this funcOne
}
protected function funcTwo(event:MouseEvent):void
{
   if( check 1 doesn't pass){
      Alert.show("error 1, returning);
      return;
   }
   if( check 2 doesn't pass){
      Alert.show("error 2, returning);
      return;
   }
   .... more checks here, all of them return specific messages 

   //if all checks pass
   //execute the specific code of this funcTwo
}

Ответы [ 3 ]

3 голосов
/ 18 ноября 2011
protected function funcOne(event:MouseEvent):void
{
    if( !checkAll(event) ){
        return;
    }
    //if all checks pass
    //execute the specific code of this funcOne
}
protected function funcTwo(event:MouseEvent):void
{
    if( !checkAll(event) ){
        return;
    }
    //if all checks pass
    //execute the specific code of this funcTwo
}

private function checkAll(event:MouseEvent):Boolean
{
    if( check 1 doesn't pass){
        Alert.show("error 1, returning);
        return false;
    }
    if( check 2 doesn't pass){
        Alert.show("error 2, returning);
        return false;
    }
    return true;
}
2 голосов
/ 18 ноября 2011

Вы можете создать строку ошибок в вашей функции проверки ошибок, а затем вернуть эту строку в вашу основную функцию. Если в строке есть содержимое, отобразите ее и прервите вашу программу;

protected function funcOne(event:MouseEvent):void
{
   errors = checkForErrors();
   if( errors != null || errors != "" )
   { 
     Alert.show( errors ); 
     return;
   }
}

protected function checkForErrors():String
{
   var errorString:String = '';

   if( check 1 doesn't pass){
      errorString +="error 1\n";
   }
   if( check 2 doesn't pass){
      errorString +="error 1\n";
   {

return errorString;

}
1 голос
/ 18 ноября 2011

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

protected function funcOne(event:MouseEvent):void
{
    if(validate())
    {
        //if all checks pass
        //execute the specific code of this funcOne
    }
}

protected function funcTwo(event:MouseEvent):void
{
    if(validate())
    {
        //if all checks pass
        //execute the specific code of this funcOne
    }  
}

//returns false if not valid
protected function validate():Boolean
{
    var errorMessage:String = null;

    if( check 1 doesn't pass)
        errorMessage = "error 1, returning";
    else if( check 2 doesn't pass)
        errorMessage = "error 2, returning";

    if(errorMessage)
        Alert.show(errorMessage);

    return !errorMessage as Boolean; //will return true if errorMessage is null
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...