我學會了自己編程,并決定使用 Kotlin。
我做了一個簡單的程式來解決一個運行良好的三角形,但我的代碼很丑陋且重復。
你能幫助我如何改進它嗎,任何建議都會有所幫助,因為即使我的代碼作業它看起來也不正確。
private fun validateNumbers() {
if(binding.etHip.text.toString().isNotEmpty()){
Hip = (binding.etHip.text.toString()).toFloat()
}
if(binding.etAdj.text.toString().isNotEmpty()){
Adj = (binding.etAdj.text.toString()).toFloat()
}
if(binding.etOpp.text.toString().isNotEmpty()){
Opp = (binding.etOpp.text.toString()).toFloat()
}
if(binding.etAngle.text.toString().isNotEmpty()){
Angle = (binding.etAngle.text.toString()).toFloat()
}
}
private fun countSelected() {
binding.cbHyp.setOnCheckedChangeListener { compoundButton, b ->
if(binding.cbHyp.isChecked){
numberCB
}
else{
numberCB--
}
}
binding.cbAdj.setOnCheckedChangeListener { compoundButton, b ->
if(binding.cbAdj.isChecked){
numberCB
}
else{
numberCB--
}
}
binding.cbOpp.setOnCheckedChangeListener { compoundButton, b ->
if(binding.cbOpp.isChecked){
numberCB
}
else{
numberCB--
}
}
binding.cbAngle.setOnCheckedChangeListener { compoundButton, b ->
if(binding.cbAngle.isChecked){
numberCB
}
else{
numberCB--
}
}
}
uj5u.com熱心網友回復:
這個怎么樣?邏輯是一樣的。它只是在語法上進行了簡化。
private fun validateNumbers() = with(binding) {
if (etHip.text.toString().isNotEmpty()) Hip = (etHip.text.toString()).toFloat()
if (etAdj.text.toString().isNotEmpty()) Adj = (etAdj.text.toString()).toFloat()
if (etOpp.text.toString().isNotEmpty()) Opp = (etOpp.text.toString()).toFloat()
if (etAngle.text.toString().isNotEmpty()) Angle = (etAngle.text.toString()).toFloat()
}
private fun countSelected() = with(binding) {
setOf(cbHyp, cbAdj, cbOpp, cbAngle).forEach {
it.setOnCheckedChangeListener { if (it.isChecked) numberCB else numberCB-- }
}
}
uj5u.com熱心網友回復:
對于這兩個功能,您可以將它們包裝起來,with(binding)這樣您就不必繼續撰寫binding.
對于validateNumbers,您可以使用toFloatOrNull()將值轉換為浮點數,或者如果它不評估為浮點數,則可以使用 null (就像空字串將是無效的)。然后,您可以使用 Elvis 運算子?:提供默認值。所以如果你不想改變值,它可以回傳自己。
此外,由于您重復執行此操作,您可以創建一個從 EditText 獲取值的快捷方式。這是TextView的一種,所以你可以把它寫成TextView的擴展。
private fun TextView.toFloatOrNull() = text.toString().toFloatOrNull()
private fun validateNumbers() = with(binding) {
Hip = etHip.toFloatOrNull() ?: Hip
Adj = etAdj.toFloatOrNull() ?: Adj
Opp = etOpp.toFloatOrNull() ?: Opp
Angle = etAngle.toFloatOrNull() ?: Angle
}
因為countSelected()他們都在他們的聽眾中做同樣的事情,你可以給他們所有相同的聽眾。lambda 中的第二個引數是它是否剛剛被檢查過,所以你也可以稍微簡化一下這個邏輯。您可以使用listOf(...).forEach它們全部獲取。
fun countSelected() = with(binding) {
val listener = OnCheckedChangeListener { _ isChecked ->
if (isChecked) numberCB else numberCB--
}
listOf(cbHyp, cbAdj, cbOpp, cpAngle).forEach {
it.onCheckedChangeListener = listener
}
}
我還將函式名稱更改為更具描述性的名稱。您的功能沒有計算一些東西......它正在設定復選框來計算自己。
請注意,按照約定,屬性和變數名稱應以小寫字母開頭。這將使您的代碼更易于閱讀。大寫的第一個字母通常保留給類和介面名稱。(它們也用于一些其他語言中的函式名稱,但你不應該在 Kotlin 中這樣做,否則它們會與建構式呼叫混淆。)
uj5u.com熱心網友回復:
具有輸入文本的擴展功能。如果是一個廣播組。是一個關于收聽廣播組的功能,而不是為每個組做的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/430679.html
