คำถามติดแท็ก scope

9
โปรแกรมเมอร์ทำอะไรก่อนขอบเขตตัวแปรซึ่งทุกอย่างอยู่ในระดับโลก?
ดังนั้นฉันต้องจัดการกับภาษา archiac ที่ดูเหมือน (เรียกว่า PowerOn) ที่ฉันมีวิธีการหลักประเภทข้อมูลไม่กี่เพื่อกำหนดตัวแปรด้วยและมีความสามารถในการมีขั้นตอนย่อย (วิธีการโมฆะเป็นหลัก) ที่ไม่กลับประเภท และไม่ยอมรับการโต้แย้งใด ๆ ปัญหาที่นี่คือทุกสิ่งที่เป็นระดับโลก ฉันได้อ่านภาษาเหล่านี้แล้ว แต่หนังสือส่วนใหญ่ใช้คำว่า "โอเคเราใช้ม้าและ cariage แต่ตอนนี้ที่นี่เป็นรถดังนั้นเรามาเรียนรู้วิธีการทำงานกับสิ่งนั้น!" เราไม่เคยจะมีชีวิตอีกวันนั้น" . ฉันต้องยอมรับความคิดจะดิ้นรนที่จะคิดนอกขอบเขตและขอบเขต ที่นี่ฉัน ฉันพยายามหาวิธีที่จะจัดการอะไรได้ดีที่สุดนอกจากตัวแปรทั่วโลกในวิธีการเปิดที่หลากหลาย ใช่แม้แต่ตัววนซ้ำสำหรับforลูปต้องถูกกำหนดให้เป็นโกลบาลีซึ่งฉันพบว่าตัวเองกำลังรีไซเคิลในส่วนต่าง ๆ ของรหัสของฉัน คำถามของฉัน: สำหรับผู้ที่มีประสบการณ์ประเภทนี้โปรแกรมเมอร์เขียนวิธีจัดการกับตัวแปรจำนวนมากในสนามเด็กเล่นทั่วโลกได้อย่างไร ฉันรู้สึกว่ามันเป็นเพียงกลลวงทางจิต แต่ฉันสนใจที่จะรู้ว่ามีปัญหาใด ๆ ที่เป็นที่รู้จักหรือไม่
40 scope 

7
มันสมเหตุสมผลหรือไม่ที่จะสร้างบล็อกเพื่อลดขอบเขตของตัวแปร?
ฉันกำลังเขียนโปรแกรมใน Java ซึ่ง ณ จุดหนึ่งฉันต้องโหลดรหัสผ่านสำหรับที่เก็บคีย์ของฉัน เพื่อความสนุกฉันพยายามเก็บรหัสผ่านของฉันไว้ในจาวาให้สั้นที่สุดโดยทำสิ่งนี้: //Some code .... KeyManagerFactory keyManager = KeyManagerFactory.getInstance("SunX509"); Keystore keyStore = KeyStore.getInstance("JKS"); { char[] password = getPassword(); keyStore.load(new FileInputStream(keyStoreLocation), password); keyManager.init(keyStore, password); } ... //Some more code ตอนนี้ฉันรู้ว่าในกรณีนี้มันเป็นใบ้ มีสิ่งอื่น ๆ อีกมากมายที่ฉันสามารถทำได้ส่วนใหญ่จริง ๆ แล้วดีกว่า (ฉันไม่เคยใช้ตัวแปรเลย) อย่างไรก็ตามฉันสงสัยว่ามีกรณีที่การทำเช่นนี้ไม่ได้โง่ขนาดนั้น สิ่งเดียวที่ฉันคิดได้ก็คือถ้าคุณต้องการใช้ชื่อตัวแปรที่เหมือนกันอีกครั้งเช่นcountหรือtempแต่การตั้งชื่อที่ดีและวิธีการสั้น ๆ ทำให้มันไม่น่าเป็นไปได้ที่จะเป็นประโยชน์ มีกรณีที่ใช้บล็อกเพียงเพื่อลดขอบเขตตัวแปรที่เหมาะสมหรือไม่?
38 java  variables  scope 

4
ทำไมต้องใช้วงเล็บในการลองจับ
ในภาษาต่าง ๆ (อย่างน้อย Java คิดว่า C #?) คุณสามารถทำสิ่งต่าง ๆ เช่น if( condition ) singleStatement; while( condition ) singleStatement; for( var; condition; increment ) singleStatement; { }ดังนั้นเมื่อผมมีเพียงแค่หนึ่งคำสั่งผมไม่จำเป็นต้องเพิ่มขอบเขตใหม่ที่มี ทำไมฉันถึงลองทำไม่ได้? try singleStatement; catch(Exception e) singleStatement; มีอะไรพิเศษเกี่ยวกับลองจับซึ่งต้องมีขอบเขตใหม่หรือบางสิ่งบางอย่างเสมอ และถ้าเป็นเช่นนั้นคอมไพเลอร์ไม่สามารถแก้ไขได้หรือไม่

8
“ ตัวแปรควรอยู่ในขอบเขตที่เล็กที่สุดเท่าที่จะเป็นไปได้” หรือไม่รวมถึง“ ตัวแปรที่ไม่ควรมีอยู่หากเป็นไปได้”?
ตามคำตอบที่ยอมรับได้ใน " เหตุผลที่ต้องการตัวแปรท้องถิ่นมากกว่าตัวแปรอินสแตนซ์? " ตัวแปรควรอยู่ในขอบเขตที่เล็กที่สุดเท่าที่จะเป็นไปได้ ลดความซับซ้อนของปัญหาในการตีความของฉันซึ่งหมายความว่าเราควรปรับโครงสร้างโค้ดประเภทนี้อีกครั้ง: public class Main { private A a; private B b; public ABResult getResult() { getA(); getB(); return ABFactory.mix(a, b); } private getA() { a = SomeFactory.getA(); } private getB() { b = SomeFactory.getB(); } } เป็นอะไรเช่นนี้: public class Main { public ABResult getResult() { …

6
ฉันควรวางฟังก์ชั่นที่ใช้ในฟังก์ชั่นอื่นเพียงหนึ่งฟังก์ชั่นภายในฟังก์ชั่นนั้นหรือไม่?
โดยเฉพาะฉันเขียนใน JavaScript สมมติว่าฟังก์ชั่นหลักของฉันคือฟังก์ชั่น A ถ้าฟังก์ชั่น A ทำการโทรไปยังฟังก์ชั่น B หลายครั้ง แต่ฟังก์ชั่น B นั้นไม่ได้ใช้ที่อื่นฉันควรวางฟังก์ชั่น B ไว้ในฟังก์ชั่น A หรือไม่ เป็นการปฏิบัติที่ดีหรือไม่? หรือฉันควรจะวาง Function B ในขอบเขตเดียวกับ Function A หรือไม่

4
วิธีกำหนดจำนวนโปรแกรมเมอร์ที่จำเป็นสำหรับโครงการ
คุณจะรู้ได้อย่างไรว่าโปรแกรมเมอร์แต่ละคนต้องการโครงการที่ประสบความสำเร็จมากแค่ไหน? บริษัท ที่ฉันทำงานเพื่อตอบสนองคำสั่งซื้อสำหรับ บริษัท ลูกค้า เราได้เขียนระบบการจัดการคลังสินค้าภายในที่จัดการการจัดการสินค้าคงคลังตามสถานที่ตั้งการประมวลผลคำสั่งการสร้างใบแจ้งหนี้การออกใบแจ้งหนี้การตรวจสอบการขนส่งสินค้าและการรายงาน (อาจมีรายงาน 50 ฉบับ) นอกจากนี้ยังมีฟังก์ชั่นการสแกนบาร์โค้ดและพอร์ทัลไคลเอ็นต์พร้อมกับคุณสมบัติอื่น ๆ อีกมากมาย นอกจากนี้ยังมีไทม์ล็อคของพนักงานเต็ม มันทำงานร่วมกับ Quickbooks, UPS และ FedEx มันทำงานกับลูกค้าอย่างน้อย 50 รายซึ่งแตกต่างกันเล็กน้อยในการทำงานของพวกเขา ตัวอย่างเช่นเรานำเข้าคำสั่งซื้อจากไฟล์ที่ลูกค้าส่ง แต่ลูกค้าแต่ละรายส่งรูปแบบไฟล์ที่แตกต่างกัน (csv, excel, ไฟล์แฟลตและบริการเว็บ) ดังนั้นเราจึงมีวิธีการแปลงชุดคำสั่งซื้อเป็นโหล การส่งออกเป็นเรื่องเดียวกัน โครงการมีความซับซ้อนและเพิ่มความซับซ้อนทุกวันด้วยรหัสมากกว่าหนึ่งล้านบรรทัด มันคือรหัส VB.NET ประมาณ 250,000 บรรทัด, รหัส Ruby 6,200 สายและบางที 5,000 บรรทัดของ PHP นอกจากนี้ยังมีฐานข้อมูล MySQL ที่มีประมาณ 200 ตาราง เนื่องจากความต้องการที่เปลี่ยนแปลงตลอดเวลาและความต้องการที่แตกต่างกันของลูกค้าหลายสิบคนรหัสจึงแตกต่างกันอย่างมากในด้านคุณภาพจากรหัสที่แย่มากไปจนถึงค่อนข้างดี ปัจจุบันโครงการนี้มีโปรแกรมเมอร์เพียงคนเดียวเท่านั้นเอง ขณะนี้ฉันยังให้การสนับสนุนผลิตภัณฑ์ทั้งหมดสำหรับ บริษัท …

3
คุณจะสร้างโครงสร้างใหม่อย่างปลอดภัยในภาษาที่มีขอบเขตแบบไดนามิกได้อย่างไร
สำหรับพวกคุณที่โชคดีที่ไม่ได้ทำงานในภาษาที่มีขอบเขตแบบไดนามิกให้ฉันขอทบทวนเล็กน้อยเกี่ยวกับวิธีการทำงาน ลองนึกภาพภาษาเทียมที่เรียกว่า "RUBELLA" ซึ่งมีลักษณะดังนี้: function foo() { print(x); // not defined locally => uses whatever value `x` has in the calling context y = "tetanus"; } function bar() { x = "measles"; foo(); print(y); // not defined locally, but set by the call to `foo()` } bar(); // prints "measles" …

5
คุณควร refactor รหัสที่มีอยู่ที่ไม่ได้ขาดในโครงการที่มุ่งเน้นคุณสมบัติใหม่?
เนื่องจากโครงการขนาดเล็กที่มีจุดประสงค์เพื่อเพิ่มฟังก์ชันการทำงานใหม่ให้กับแอปพลิเคชันการเปลี่ยนแปลงที่นำมาใช้จะสัมผัสรหัสที่มีอยู่บางส่วน ในระหว่างการนำไปใช้ฉันพบรหัสบางส่วนที่ได้รับการอัปเดตมีตัวเลือกสำหรับการปรับโครงสร้างใหม่ นี่เป็นเวลาที่เหมาะสมในการปรับโครงสร้างซึ่งจะต้องมีการทดสอบการถดถอยสำหรับส่วนประกอบเหล่านั้นที่ได้รับผลกระทบ (ซึ่งอาจเป็นการแนะนำขอบเขตที่ไม่ได้เป็นส่วนหนึ่งของโครงการ) หรือฉันควรเลื่อนการทำงานให้เสร็จสมบูรณ์และอาจมีโครงการแยกต่างหากสำหรับการปรับโครงสร้างใหม่ (แม้ว่าฉันจะลังเลเล็กน้อยเนื่องจากผู้ใช้ทางธุรกิจอาจไม่สนับสนุนโครงการที่ไม่ได้เพิ่มฟังก์ชั่นใด ๆ เลย

5
ขอบเขตระดับแพ็กเกจ Java มีประโยชน์หรือไม่
ฉันเข้าใจความคิดเกี่ยวกับขอบเขตของแพ็คเกจและบางครั้งฉันก็คิดว่าฉันต้องการมัน อย่างไรก็ตามทุกครั้งที่ฉันตั้งใจจะลองใช้มันฉันพบว่ามันไม่ตรงกับความต้องการที่ฉันคิดว่าจะให้บริการ ปัญหาหลักของฉันมักจะเป็นสิ่งที่ฉันต้องการ จำกัด ขอบเขตไม่เคยอยู่ในแพ็คเกจเดียวกัน พวกเขาอาจเชื่อมโยงแนวความคิดทั้งหมด แต่การแบ่งตรรกะของข้อมูลภายในแอปพลิเคชันมีพวกเขาเป็นแพคเกจลูกที่แยกต่างหากของแพคเกจขนาดใหญ่ เช่นฉันอาจมีแบบจำลอง Mission และฉันต้องการเครื่องมือ Mission อื่น ๆ เท่านั้นเช่น MissionServices ของฉันเพื่อใช้วิธีการบางอย่าง อย่างไรก็ตามฉันลงเอยด้วย Missions.models และ Missions.services เป็นแพ็คเกจของฉันดังนั้น MissionModel และ MissionService จึงไม่ใช่ขอบเขตของแพ็คเกจเดียวกัน ดูเหมือนว่าจะไม่มีสถานการณ์ที่แพคเกจบรรจุสิ่งที่ฉันต้องการให้มีสิทธิ์ในการยกระดับอย่างเหมาะสมโดยไม่ต้องมีหลายสิ่งที่ฉันไม่ต้องการได้รับสิทธิ์เหล่านั้น และฉันไม่ค่อยรู้สึกถึงประโยชน์ของการกำหนดขอบเขตของวิธีการที่จะปรับเปลี่ยนสถาปัตยกรรมโปรเจคของฉันให้วางทุกอย่างในแพ็คเกจเดียวกัน บ่อยครั้งที่มุมมองหรือการผกผันของการควบคุมบางอย่างกลับกลายเป็นวิธีที่ดีกว่าสำหรับปัญหาใด ๆ ที่ฉันพิจารณาโดยย่อว่าการกำหนดขอบเขตของแพ็กเกจ ฉันอยากรู้ว่านี่เป็นเรื่องจริงสำหรับนักพัฒนา Java ทุกคนหรือเป็นเพียงความบังเอิญของงานที่ฉันทำ ขอบเขตของแพ็คเกจมีการใช้งานมากในโลกแห่งความเป็นจริงหรือไม่? มีหลายกรณีที่มีการพิจารณาว่าเป็นรูปแบบที่ดีต่อการใช้งานหรือเป็นส่วนใหญ่ที่เห็นว่าเป็นพฤติกรรมดั้งเดิมที่ไม่ค่อยถูกใช้ประโยชน์ในการพัฒนาสมัยใหม่หรือไม่? ฉันไม่ได้ถามอะไรเกี่ยวกับสาเหตุที่ขอบเขตส่วนบุคคลของแพคเกจเป็นค่าเริ่มต้นฉันกำลังถามว่าควรใช้เมื่อใดโดยไม่คำนึงถึงค่าเริ่มต้น การอภิปรายส่วนใหญ่เกี่ยวกับสาเหตุที่เป็นค่าเริ่มต้นไม่ได้เข้าจริงๆเมื่อขอบเขตของแพคเกจมีประโยชน์จริง ๆ แทนที่จะเถียงเพียงเพราะเหตุที่ขอบเขตที่ใช้กันทั่วไปอีกสองอันไม่ควรเป็นค่าเริ่มต้นดังนั้นแพ็คเกจชนะโดยกระบวนการกำจัด นอกจากนี้คำถามของฉันเป็นเรื่องเกี่ยวกับปัจจุบันรัฐในการพัฒนา โดยเฉพาะอย่างยิ่งเราได้พัฒนาจนถึงจุดที่เครื่องมือและกระบวนทัศน์อื่นทำให้ขอบเขตของแพคเกจมีประโยชน์น้อยลงจากนั้นก็กลับมาเมื่อการตัดสินใจเพื่อให้เป็นค่าเริ่มต้น
11 java  scope 

4
การใช้บล็อกขอบเขตภายในภายในฟังก์ชั่นมีสไตล์ไม่ดีหรือไม่?
มีบางกรณี (ค่อนข้างหายาก) ที่มีความเสี่ยง: การนำตัวแปรที่ไม่ต้องการนำมาใช้ซ้ำ (ดูตัวอย่างที่ 1) หรือใช้ตัวแปรแทนตัวแปรอื่นปิดความหมาย (ดูตัวอย่างที่ 2) ตัวอย่างที่ 1: var data = this.InitializeData(); if (this.IsConsistent(data, this.state)) { this.ETL.Process(data); // Alters original data in a way it couldn't be used any longer. } // ... foreach (var flow in data.Flows) { // This shouldn't happen: given that ETL possibly …

7
มีคำที่ใช้หรือไม่เมื่อมีการประกาศตัวแปรภายในสู่สาธารณะและสามารถเข้าถึงได้
หากมีคนเขียนโค้ดเพื่อให้ตัวแปร $ _fields ภายในสามารถเข้าถึงได้โดยไม่ต้องใช้วิธี getter / setter มีคำที่เหมาะสมที่ใช้อธิบายหรือไม่ บางสิ่งบางอย่างสุภาพพอที่จะใช้กับการจัดการ :)

5
จะทำให้มันชัดเจนได้อย่างไรว่าฟังก์ชั่นนั้นถูกเข้าถึงจากภายนอก?
นี่เป็นคำถามเฉพาะ C ฉันพยายามทำให้ทุกอย่างเป็นไปได้ภายในขอบเขตหน่วยการแปลโดยแสดงฟังก์ชั่นบางอย่างผ่าน.hไฟล์ นั่นคือฉันกำลังstaticเชื่อมโยงกับวัตถุระดับไฟล์ ตอนนี้ฟังก์ชั่นสองอย่างจำเป็นต้องมีการเรียกใช้โดยโมดูลอื่น แต่ไม่ใช่โดยตรง โมดูล / ไฟล์ / หน่วยการแปลของฉันสมัครสมาชิกกับโมดูลอื่นผ่านตัวชี้ไปยังฟังก์ชัน จากนั้นเมื่อมีเหตุการณ์ที่เฉพาะเจาะจงตัวชี้จะถูกเรียกด้วยอาร์กิวเมนต์บางตัว ดังนั้นฉันสงสัยว่าจะทำให้มันชัดเจนมากว่าฟังก์ชั่นเหล่านั้นถูกเรียกจากสถานที่คลุมเครือ พวกเขาควรจะเป็นstaticหรือextern(และเปิดเผยพวกเขาใน.h)? ฉันควรจะใส่คำใบ้ไว้ในชื่อของฟังก์ชั่นหรือไม่? หรือมันเพียงพอที่จะใส่ความคิดเห็น "เรียกโดย X"?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.