250'den fazla oylama cevabı olmasına rağmen neden söylediğime önem vermelisin?
Bu 0 = true
ve değil 1 = false
. Sıfır : hata olmaması (başarı) ve sıfır olmayan arıza (N tipi) anlamına gelir .
İken seçilen cevap teknik olarak "doğru" olduğunu lütfen koymayın return 1
için kodunuzda ** YANLıŞ . Birkaç talihsiz yan etkisi olacaktır.
- Deneyimli geliştiriciler sizi amatör olarak görecektir (aşağıdaki nedenden dolayı).
- Deneyimli geliştiriciler bunu yapmaz (aşağıdaki tüm nedenlerden dolayı).
- Hata eğilimli.
- Deneyimli geliştiriciler bile 0 ve 1'i sırasıyla yanlış ve doğru olarak karıştırırlar (yukarıdaki nedenden dolayı).
- Aşırı ve saçma yorumlar gerektirir (veya teşvik edecektir).
- Aslında örtük dönüş durumlarından daha az yardımcı olur.
Biraz bash öğrenin
Bash manuel diyor (vurgu benim)
dönüş [n]
Çalıştırmayı durdurmak ve n değerini arayana döndürmek için bir kabuk işlevine neden olun. N sağlanmazsa , dönüş değeri işlevde yürütülen son komutun çıkış durumudur .
Bu nedenle, DOĞRU ve Yanlış belirtmek için HİÇ 0 ve 1 kullanmamız gerekmez. Bunu yapmaları, aslında sadece kodun hatalarını ayıklamak, röportaj soruları ve yeni başlayanların zihinlerini uçurmak için yararlı olan önemsiz bir bilgidir.
Bash el kitabı ayrıca
aksi takdirde işlevin dönüş durumu, yürütülen son komutun çıkış durumudur
Bash el kitabı ayrıca
( $? ) En son yürütülen ön plan boru hattının çıkış durumuna genişler .
Vay, bekle. Boru hattı? Diyelim bash manuel için dönüş bir kez daha.
Bir boru hattı, kontrol operatörlerinden biriyle ayrılmış bir veya daha fazla komutun bir dizisidir '|' veya '| &'.
Evet. 1 komutun bir boru hattı olduğunu söylediler. Bu nedenle, bu alıntıların 3'ü de aynı şeyi söylüyor.
$?
en son ne olduğunu anlatır.
- Kabarcıkları.
Cevabım
Yani, @Kambus böyle basit bir işlevle, hiç return
gerek olmadığını gösterdi. Bunu okuyacak çoğu insanın ihtiyaçlarına kıyasla gerçekçi olmayan bir şekilde basit olduğunu düşünüyorum.
Neden return
?
Bir işlev son komutunun çıkış durumunu döndürecekse, neden return
hiç kullanıyorsunuz ? Çünkü bir işlev yürütmeyi durdurur.
Birden çok koşulda yürütmeyi durdurma
01 function i_should(){
02 uname="$(uname -a)"
03
04 [[ "$uname" =~ Darwin ]] && return
05
06 if [[ "$uname" =~ Ubuntu ]]; then
07 release="$(lsb_release -a)"
08 [[ "$release" =~ LTS ]]
09 return
10 fi
11
12 false
13 }
14
15 function do_it(){
16 echo "Hello, old friend."
17 }
18
19 if i_should; then
20 do_it
21 fi
Burada ne var ...
Satır 04
açık bir [-ish] dönüşüdür çünkü RHS değeri &&
yalnızca LHS doğruysa yürütülür
Satır 09
, satır durumuyla eşleşen doğru veya yanlış döndürür08
Satır 13
, satır nedeniyle yanlış döndürür12
(Evet, bu golf edilebilir, ancak tüm örnek kabul edilir.)
Başka bir ortak desen
# Instead of doing this...
some_command
if [[ $? -eq 1 ]]; then
echo "some_command failed"
fi
# Do this...
some_command
status=$?
if ! $(exit $status); then
echo "some_command failed"
fi
Bir status
değişken belirlemenin anlamını nasıl belirlediğine dikkat edin $?
. (Elbette bunun ne $?
anlama geldiğini biliyorsunuz , ancak bir gün Google'dan daha az bilgili biri var. Kodunuz yüksek frekanslı ticaret yapmıyorsa, biraz sevgi gösterin , değişkeni ayarlayın.) Ama asıl paket şu ki " durum yok "veya tersine" çıkış durumu varsa "yüksek sesle okunabilir ve anlamlarını açıklayabilir. Ancak, sonuncusu biraz iddialı exit
olabilir , çünkü kelimeyi görmek size senaryodan çıktığını düşündürür, gerçekte $(...)
alt kabuktan çıkarken .
** Kesinlikle return 1
yanlış için kullanmakta ısrar ederseniz, return 255
bunun yerine en azından kullanmanızı öneririm . Bu, gelecekteki benliğinizin veya kodunuzu koruması gereken herhangi bir geliştiricinin "neden bu 255?" O zaman en azından dikkat edecekler ve bir hatadan kaçınma şansları daha yüksek olacaktır.
function
anahtar kelimeyi bırak ,myfun() {...}
yeterlidir