Снижает ли эта ifs производительность? - PullRequest
1 голос
/ 25 апреля 2019

Итак, я модулирую свое приложение с архитектурой, теперь, на мой взгляд, я получаю fullName , пароль 1 (pw1) , пароль2 (pw2) и email .

У меня есть действие кнопки, которое вызывает signUp() метод

регистрация

override fun signUp() {
        val fullName:String = etxt_name.text.trim().toString()
        val email:String = etxt_email.text.trim().toString()
        val pw1:String = etxt_pw1.text.trim().toString()
        val pw2:String = etxt_pw2.text.trim().toString()

        if(presenter.isEmailValid(email)){

            if(presenter.passwordsMatch(pw1,pw2)){

                if(presenter.isPasswordEmpty(pw1,pw2)){

                    etxt_pw1.setError("Empty field")
                    etxt_pw2.setError("Empty field")
                    return

                }else{
                    if(presenter.isNameEmpty(fullName)){

                        etxt_name.setError("Empty name")
                        return

                    }else{
                        presenter.signUp(fullName,email,pw1)
                    }

                }

            }else{
                etxt_pw1.setError("Passwords does not match")
                etxt_pw2.setError("Passwords does not match")
                return
            }

        }else{

            etxt_email.setError("Invalid E-mail")
            return
        }

    }

Это вызывает методы вмой ведущий для проверки каждого поля

ведущий

   override fun passwordsMatch(pw1: String, pw2: String): Boolean {
        return pw1.equals(pw2)
    }

    override fun isEmailValid(email: String): Boolean {
        return Pattern.matches(
            "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])",
            email)
    }

    override fun isPasswordEmpty(pw1: String, pw2: String): Boolean {
        return !(pw1.isEmpty() || pw2.isEmpty())
    }

    override fun isNameEmpty(fullName: String): Boolean {
        return fullName.isEmpty()
    }

мой вопрос

Я так понимаю, я реализую его правильно?или мне лучше сделать?Если да, то любые советы будут оценены по достоинству, а также, если показатели снижают производительность в методе регистрации?

Спасибо

1 Ответ

2 голосов
/ 25 апреля 2019

Ваш подход хорош, но его можно изменить, чтобы другие могли его легче понять.Например, функция signUp() может быть воссоздана следующим образом:

override fun signUp() {
    val fullName:String = etxt_name.text.trim().toString()
    val email:String = etxt_email.text.trim().toString()
    val pw1:String = etxt_pw1.text.trim().toString()
    val pw2:String = etxt_pw2.text.trim().toString()

    if (!presenter.isEmailValid(email)) {
        etxt_email.setError("Invalid E-mail")
        return
    }

    if (!presenter.passwordsMatch(pw1,pw2)) {
        etxt_pw1.setError("Passwords does not match")
        etxt_pw2.setError("Passwords does not match")
        return
    }

    if (presenter.isPasswordEmpty(pw1,pw2)) {
        etxt_pw1.setError("Empty field")
        etxt_pw2.setError("Empty field")
        return
    }

    if (presenter.isNameEmpty(fullName)) {
        etxt_name.setError("Empty name")
        return
    }

    presenter.signUp(fullName, email, pw1)
}

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

...