这些 ifs 语句会降低性能吗?
Does these ifs statments decrease performance?
所以,我正在使用架构模块化我的应用程序,现在,在我看来,我得到了 fullName、password 1 (pw1) , password2 (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
}
}
这会调用我的 Presenter 中的方法来验证每个字段
主持人
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()
}
我的问题
我是这样实施的,我的方法是正确的吗?还是我应该让它变得更好?如果是这样,任何提示都会受到赞赏,另外,那些 if 语句会降低注册方法中的性能吗?
谢谢
您的方法很好,但可以修改以更容易被其他人理解。例如,函数 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)
}
据我所知,if 语句不会降低性能,这是创建验证器的常用方法。至于你的其他文件,它似乎是正确的。希望对您有所帮助:)
所以,我正在使用架构模块化我的应用程序,现在,在我看来,我得到了 fullName、password 1 (pw1) , password2 (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
}
}
这会调用我的 Presenter 中的方法来验证每个字段
主持人
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()
}
我的问题
我是这样实施的,我的方法是正确的吗?还是我应该让它变得更好?如果是这样,任何提示都会受到赞赏,另外,那些 if 语句会降低注册方法中的性能吗?
谢谢
您的方法很好,但可以修改以更容易被其他人理解。例如,函数 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)
}
据我所知,if 语句不会降低性能,这是创建验证器的常用方法。至于你的其他文件,它似乎是正确的。希望对您有所帮助:)