GOTO PHP kötülük mı?

14 Cevap php

Geçenlerde PHP 5.3 olarak adlandırılan yeni bir dil yapısı destekler öğrendim GOTO. Herkes ne yaptığını biliyor. Ancak, tam olarak GOTO, sadece bir atlama etiket geleneksel değil bu. Ben bu GOTO kötülük ve kötü kod ima olup olmadığını bilmeden ilginç değilim?

14 Cevap

Eğer assembler programlama sürece, GOTO hep uçakların can yeleği gibi aynı şekilde tedavi edilmelidir: bunları kullanılabilir olması için iyi olduğunu, ancak bunları kullanmak gerekiyorsa bunu büyük belada demektir.

Ben kimsenin bu yayınlanmıştır inanamıyorum :)

xkcd - goto

Verilen, PHP Belki raptor web sitenize her ziyaret sizi takip edecek ... derlenmiş değil mi?

Kod kötü yapılaşma, kullanmak ne olursa olsun kontrol yapısı kötülüktür.

Ben şahsen programın açıkça akışını yapan bir goto tercih "kontrol değişkenleri" ve iç içe bu dolaylı sadece kod aynı şube neden olacaktır "eğer".

Yani, sadece iki versiyonu (ve GOTO olmadan) yazmak ve bunu anlamak için daha kolay hangisini görmek. Sonra seçim çok kolay.

Ben azınlık (şu anda) değilim, ama ben PHP'nin Goto yapı üzerine yerleştirilen kısıtlamalar bir çok yararlı bir araç yapmak inanıyorum:

http://adamjonrichardson.com/2012/02/06/long-live-the-goto-statement/

Aslında ok kod (içe geçmiş koşul) bir örnek üzerinden yürümek ve diğer versiyonunda bir sürüm ve Goto-tabanlı versiyonu (bekçi hükümleri koşullarını gruplandırmak, işlevleri çekerek) standart uygulamalarını kullanarak Refactor, ve ben aslında tercih Goto-tabanlı üstlenmeden.

Silahlar kötülük vardır? Her ikisi de iyi ya da kötülük için de kullanılabilir. Ben onunla daha Goto olmadan iyi kod yazmak için daha kolay olduğunu söyleyebilirim.

Belirli bir durumda kodu daha okunabilir yapabilirsiniz herhangi bir dil özelliği iyi bir şeydir. GOTO bu durumlar ve seyrek olsa bile, böyle bir dil özelliğidir. Biz mümkün yoksul programcılar kötü yazmak için yapılan herhangi bir sözdizimi yasakladı varsa, unmaintainable kod bizim işleri zor korkunç bir sürü olacaktır.

Eğer yapılandırılmamış kod inşa edelim, çünkü GOTO genellikle kötüdür. Eğer takip etmek kolay, iyi yapılandırılmış kod inşa edebiliyoruz zamanki döngüler ile, çünkü sadece, yapılandırılmış.

Eğer yapılandırılmış olmayan kodu var ve orada buradan atlayabilir zaman sadece GOTO cümle gelen kötülüğü bulduk. Hemen hemen her zaman orada bir GOTO cümle bir sürü kod kolaylaştırır ve kötü olmayan bir yer ama emin değilseniz benim gibi ve GOTO unutun yok belki bir kez 10.000 hatlarında, bunu kullanmak daha iyidir :)

Umarım bu yardımcı olur.

EDIT: Evet, sadece burada benim kendi görüş eklemek için, yapılandırılmamış kod oluşturmak için izin ve onlar olması gerektiğini düşünüyorum zaman kötü sayılmaz diğer talimatları vardır.

Örneğin bir işlevin ortasında bir dönüş yüzden ben bunları önlemek ve sadece kendi sonunda her fonksiyonun yalnızca bir dönüş kullanmayın bunun sonuna bir GOTO olduğunu.

Sonları ve ayrıca kod unstructure ve bence bu gibi şeyler kaçınmak olmalı, olsa Vb.Net gibi diğer diller (belki başkaları da) Exit For Çık yapmak için izin verir.

As a software engineer, i mostly work on "mainframes" and "big corporate servers"... And our daily language (I mean the one in 95% of our base code) is Cobol, which uses extensively GOTOs.

Bu kullanım kod kötü olduğu anlamına gelmez. Sadece bu araç (GOTO) an programlarında doğru bir yazılmış oldu demektir.

To answer Kaitsuli's question, I think it can be useful tool when writing PHP scripts. On the other hand, a lot of scripts were achieved without it for almost a decade by now. Furthermore, it goes against PHP's evolution with more object-oriented features.

Bu IMHO var, ne iyi ne de kodu için kötü bir şey üretilebilir: iyi programlar hala iyi ve "korku programlar" daha kötü olacak olacak ... tek soru şudur: "Neden 10 yıl gerekli değildi kanıtladıktan sonra Gotos ekleyerek? ".

Ben bu PHP manual page ve burada eksik en önemli parçası olduğunu düşünüyorum:

Bu not a full unrestricted goto. Hedef etiket bu you cannot jump out of a function or method, nor can you jump into one, yani aynı dosya ve aynı bağlam içinde olmalıdır. Ayrıca döngü veya switch her türlü geçemiyoruz. Bunlardan üzerinden atlayabilir, ve bir ortak kullanımı çok seviyeli bir break yerine bir goto kullanmaktır.

Bu ye olde BASIC style gotos den çok farklı kılan IMHO.

Ben cli modunda çalışmak için senaryo yazarken ben GOTO kullanılır. Bu benim hayat kurtarmak.

bazen (I olguların% 0.01 ortalama) bu çok uzun bir komut dosyası var ve bazı blokları test etmek istiyorsanız zaman gibi, yararlıdır. ancak son komut tutmak asla

goto herhangi bir dilde kötülüktür.

Ancak bazen küçük bir kötü bir iyi bir şeydir. muhaaahaahaaa ...

GOTO dilden çıkarılmalıdır. Herkes "kayıtsız şartsız kontrol aktarmak" için bir ihtiyaç varsa, o zaman Yapısal Programlama 101 incelemek için okula gitmek gerekir

Ben sadece şimdi PHP "goto" keşfetti ve onunla biraz oynadım. Sadece reklamı gibi, çalışır, ve ben bunun için bazı kullanımlarını hayal edebilirsiniz. Ama bunu kullanmak için iyi bir yer bulamadım OTOH.