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

Function คือบล็อกของรหัสที่ทำหน้าที่เฉพาะ

1
มีข้อแตกต่างระหว่างอาร์กิวเมนต์และพารามิเตอร์หรือไม่
มันอาจจะเป็นเช่นนี้: พารามิเตอร์หมายถึงจากผู้โทร POV และข้อโต้แย้งหมายถึงภายในขั้นตอนหรือวิธีอื่น ๆ รอบ หรือไม่มีความแตกต่าง? ปรับปรุง ในสวีเดนเราพูดว่า "anropsparametrar" เช่น "พารามิเตอร์ที่กำลังเรียกขั้นตอน" และเราจะไม่พูดว่า "anropsargument" ("อาร์กิวเมนต์ที่เรียกขั้นตอน")

6
ทำไมหลายภาษาไม่สนับสนุนพารามิเตอร์ที่มีชื่อ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันแค่คิดว่าจะอ่านรหัสได้ง่ายขึ้นแค่ไหนเมื่อเรียกฟังก์ชั่นคุณสามารถเขียน: doFunction(param1=something, param2=somethingElse); ฉันไม่สามารถนึกถึงข้อเสียใด ๆ และมันจะทำให้อ่านง่ายขึ้น ฉันรู้ว่าคุณสามารถส่งผ่านอาร์เรย์เป็นอาร์กิวเมนต์เท่านั้นและมีคีย์อาร์เรย์เป็นชื่อพารามิเตอร์อย่างไรก็ตามที่จะยังคงไม่สามารถอ่านได้ มีข้อเสียที่ฉันหายไปนี้หรือไม่? ถ้าไม่ทำไมหลายภาษาไม่อนุญาตสิ่งนี้

2
ออกแบบ: วิธีการวัตถุกับวิธีการแยกชั้นซึ่งใช้วัตถุเป็นพารามิเตอร์?
ตัวอย่างเช่นจะดีกว่าที่จะทำ: Pdf pdf = new Pdf(); pdf.Print(); หรือ: Pdf pdf = new Pdf(); PdfPrinter printer = new PdfPrinter(); printer.Print(pdf); ตัวอย่างอื่น: Country m = new Country("Mexico"); double ratio = m.GetDebtToGDPRatio(); หรือ: Country m = new Country("Mexico"); Country us = new Country("US"); DebtStatistics ds = new DebtStatistics(); double usRatio = ds.GetDebtToGDPRatio(us); double …

2
เหตุผลของคำสั่ง return ในการเรียกใช้ฟังก์ชันแบบเรียกซ้ำ
ฉันเพิ่งสงสัยในใจ รูทีนย่อยต่อไปนี้ (เพื่อค้นหาองค์ประกอบในรายการ) มีคำสั่ง return ที่ท้าย: list *search_list(list *l, item_type x) { if (l == NULL) return(NULL); if (l->item == x) return(l); else return( search_list(l->next, x) ); } ฉันไม่สามารถรับความสำคัญของคำสั่ง return ในตอนท้าย (เช่น return search_list (l-> next, x)) มันจะมีประโยชน์จริง ๆ ถ้าใครสามารถอธิบายแนวคิดนี้โดยใช้โมเดลสแต็ก

4
เทคนิคการลดจำนวนอาร์กิวเมนต์ของฟังก์ชันให้น้อยที่สุด
ในรหัสที่สะอาดมันถูกเขียนขึ้นว่า "จำนวนอาร์กิวเมนต์ที่เหมาะสมที่สุดสำหรับฟังก์ชั่นเป็นศูนย์" เหตุผลที่อธิบายและเข้าใจได้ง่าย สิ่งที่ฉันตามมาคือเทคนิคในการปรับเปลี่ยนวิธีด้วยอาร์กิวเมนต์ 4 ตัวขึ้นไปเพื่อแก้ปัญหานี้ วิธีหนึ่งคือการแยกอาร์กิวเมนต์ไปยังคลาสใหม่ แต่นั่นจะนำไปสู่การระเบิดของคลาสอย่างแน่นอนหรือไม่ และคลาสเหล่านั้นมีแนวโน้มที่จะจบลงด้วยชื่อที่ละเมิดกฎการตั้งชื่อบางอย่าง (ลงท้ายด้วย "Data" หรือ "Info" ฯลฯ ) หรือไม่ อีกเทคนิคหนึ่งคือการทำให้ตัวแปรที่ใช้โดยหลายฟังก์ชั่นเป็นตัวแปรสมาชิกส่วนตัวเพื่อหลีกเลี่ยงการผ่านตัวแปรเหล่านั้น แต่นั่นเป็นการขยายขอบเขตของตัวแปรซึ่งอาจเป็นการเปิดให้ฟังก์ชั่นที่ไม่จำเป็นต้องใช้จริง เพียงมองหาวิธีลดอาร์กิวเมนต์ของฟังก์ชันให้เล็กที่สุดโดยยอมรับเหตุผลว่าทำไมจึงเป็นความคิดที่ดี

2
ฉันควรตั้งชื่อฟังก์ชั่นที่คืนค่าใน Python อย่างไร?
ฉันสับสนเกี่ยวกับการเลือกชื่อสำหรับการทำงานของฉันในหลาม บางครั้งหลามในตัวฟังก์ชั่นที่มีความจำเป็นเช่นฟังก์ชั่นและวิธีสตริงprint findบางครั้งพวกเขาไม่ได้เช่นlenชื่อของมันไม่ได้เป็นความจำเป็นเช่นcalculate_lenตัวอย่างและไม่ได้เป็นtypefind_type ฉันสามารถเข้าใจว่าprintคืนค่าที่เราไม่ได้ใช้ (เช่นNone) และทำบางสิ่ง (เช่นมันจะแสดงสตริงบนหน้าจอ) ดังนั้นชื่อของมันจึงมีความจำเป็น แต่lenกลับเป็นค่าที่เราใช้และทำอะไรบางอย่าง (เช่นการคำนวณจำนวนรายการที่มีอยู่ในลำดับหรือการแมป.) และชื่อของมันไม่ได้เป็นความจำเป็น บนมืออื่น ๆ , findวิธีสตริง (เป็นlen) ส่งกลับค่าที่เราใช้และไม่บางสิ่งบางอย่างและชื่อของมันคือความจำเป็น สิ่งที่ทำให้คำถามนี้คือฉันใส่สคริปต์ที่เข้ารหัสและถอดรหัสสตริงโดยใช้ Caesar cipher เพื่อตรวจสอบ ผู้วิจารณ์กล่าวว่า: เป็นเพียงความรู้สึก: ฟังก์ชั่นทำสิ่งต่างๆ ดังนั้นชื่อที่ดีสำหรับการทำงานเป็นความจำเป็น: ฉันต้องการใช้แทนrotate_letterrotated_letter rotated_letterส่งคืนสตริงตัวอักษรเดี่ยวที่แทนตัวอักษรที่หมุนด้วยตัวเลข ผมไม่ทราบว่าสิ่งที่ดีกว่าที่ผมใช้rotated_letterเป็นมันจะกลับค่าเช่นrandintฟังก์ชั่นในโมดูลสุ่มgenerate_randintก็เป็นได้ ดังนั้นในกรณีนี้ฉันจะตั้งชื่อฟังก์ชันที่ส่งกลับค่าที่จะใช้อย่างไร ฉันควรจะให้ชื่อมีความจำเป็นหรือเพียงแค่เป็นรูปธรรม ในกรณีอื่น ๆ จะเห็นได้ชัดว่าจะทำอย่างไรเช่นฟังก์ชั่นบูลีนเช่นis_evenและis_palindromeเราก็ทำให้มันเหมือนคำถามใช่ / ไม่ใช่และฟังก์ชั่นที่เพิ่งทำและคืนค่าที่ไม่ได้ใช้ (เช่นNone), printและวิธีรายการsort.

18
คุณชื่อฟังก์ชัน / ตัวแปร / ฯลฯ อะไรเมื่อคุณนึกชื่อไม่ออก [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา เมื่อคุณกำหนดฟังก์ชั่น / ตัวแปร / ฯลฯ และไม่แน่ใจว่าจะตั้งชื่ออะไรคุณตั้งชื่ออะไร คุณสร้างชื่อขึ้นมาได้อย่างไร? หากคุณใช้ชื่อชั่วคราวเป็นบัตรสถานที่จนกว่าคุณจะให้มันเป็นชื่อจริงคุณใช้ชื่ออะไรชั่วคราว ปรับปรุง ฉันได้ใช้สิ่งที่ชอบWILL_NAME_LATER, หรือNEEDS_NAME TO_BE_NAMEDฉันหวังว่าจะมีการประชุมที่เป็นลูกบุญธรรมจริง ๆ แล้วฉันหวังว่าถ้าฉันใช้การประชุมที่นำมาใช้นี้ IDE ของฉันจะเน้นชื่อจนกว่าฉันจะเปลี่ยนมัน

6
คำที่ใช้อธิบายฟังก์ชั่น / วิธีที่แก้ไขวัตถุที่ถูกเรียกนั้นคืออะไร?
ขออภัยสำหรับคำถามทั่วไป ฉันค้นหาทั่วและพบกระทู้จำนวนมากที่คล้ายกันนี้ แต่ไม่ใช่หนึ่งที่ตอบคำถามเฉพาะของฉัน - บางทีอาจเป็นเพราะคำที่ฉันค้นหาไม่มีอยู่ เพื่อนคนหนึ่งของฉันคือการเรียนรู้การเขียนโปรแกรมจาวาสคริปต์โดยเฉพาะและเขาถามฉันว่าทำไมมันถึงไม่ทำงาน: var a = "Hello World"; a.replace("Hello", "Goodbye"); console.log(a) // Logs "Hello World" เหตุผลเป็นเพราะreplaceไม่ได้แก้ไขaเนื่องจากสตริงไม่เปลี่ยนรูปใน JavaSript เพราะมันส่งคืนสตริงคุณต้องทำอะไรบางอย่างเช่น ... var a = "Hello World"; a = a.replace("Hello", "Goodbye"); console.log(a); // Logs "Goodbye World" อย่างไรก็ตามทางเลือกคือฟังก์ชั่นเช่นจาวาสคริปต์reverse()เพราะมันจะทำการแก้ไขสิ่งที่เรียกว่า ตัวอย่างเช่น: var fruits = ["Apples", "Oranges", "Bananas"]; fruits.reverse(); console.log(fruits) // ["Bananas", "Oranges", "Apples"] …

2
เหตุใดจึงใช้ `const foo = () => {}` แทนที่จะเป็น `function foo () {} '
ตัวอย่างเช่นในวิดีโอ Reduxนี้ผู้สอนมักใช้ไวยากรณ์เช่น const counter = (state=0, action) => { ... function body here } ฉันจะใช้ "ดั้งเดิม" แค่ไหน function counter(state=0, action) { ... function body here } ซึ่งสั้นกว่าจริงๆและ IMO จะชัดเจนขึ้น มันง่ายกว่าที่จะสแกนขอบซ้ายที่เป็นธรรมและมีโครงสร้างของหน้าสำหรับคำว่า "ฟังก์ชั่น" มากกว่าการสแกนขอบด้านขวาที่เป็นเศษเล็กเศษน้อยสำหรับขนาดเล็ก "=>" นอกเหนือจากthisและพยายามที่จะมีวัตถุประสงค์ไม่ใช่ความเห็นมีความแตกต่างหรือประโยชน์ที่เป็นประโยชน์ต่อไวยากรณ์ newfangled หรือไม่

3
ทำไมเราไม่สามารถเขียนฟังก์ชั่นการจดชวเลขซ้อนใน Clojure ได้?
ฉันพยายามประเมินการแสดงออกของ Clojure ด้วยฟังก์ชั่นชวเลขที่ซ้อนกันในวันนี้และมันจะไม่ยอมให้ฉัน การแสดงออกคือ: (#(+ % (#(+ % (* % %)) %)) 5) ; sorry for the eye bleed ผลลัพธ์คือ: IllegalStateException Nested #()s are not allowed clojure.lang.LispReader$FnReader.invoke (LispReader.java:630) ...and a bunch of other garbage

5
แปลงรายการค่าเร่งรัด 24 ชั่วโมงเป็นทั้งหมดโดยชั่วโมง
สมมติว่าฉันมีรายการค่าการตกตะกอนเป็นชั่วโมงแต่ละคนแสดงว่าฝนตกมากแค่ไหนใน 24 ชั่วโมงก่อนเรียงตามวันที่ ตัวอย่างเช่น: { '2012-05-24 12:00': 0.5, // .5" of rain from 5/23 12:00 - 5/24 11:59 '2012-05-24 11:00': 0.6, // .6" of rain from 5/23 11:00 - 5/24 10:59 '2012-05-24 10:00': 0.6, // .6" of rain from 5/23 10:00 - 5/24 09:59 ... '2012-05-23 10:00': 0 } มีกลยุทธ์ …

4
สแตกการโทรเริ่มที่ด้านล่างหรือด้านบน?
สแต็คเป็นสิ่งที่ซ้อนจากล่างขึ้นบน ดังนั้นสแต็กการโทรจะเพิ่มไอเท็มใหม่บนสแต็กเมื่อเรียกใช้ฟังก์ชันโดยไอเท็มจะถูกลบออกจากสแต็กเมื่อแต่ละฟังก์ชันสิ้นสุดลงจนกว่าสแต็กจะว่างเปล่าจากนั้นโปรแกรมจะสิ้นสุด หากข้อมูลด้านบนถูกต้องเหตุใดผู้คนจึงอ้างถึงการควบคุมการย้าย "up" ของ call stack? การควบคุมอย่างแน่นอนเลื่อนลงไปสแตกการโทรจนกว่าจะถึงด้านล่าง
11 functions  stack 

2
การแก้ปัญหาที่มาพร้อมกับฟังก์ชัน dyadic assertEquals (คาดว่าเป็นจริง)
หลังจากรหัสคาวบอยมาหลายปีฉันตัดสินใจที่จะรับหนังสือเกี่ยวกับวิธีการเขียนโค้ดคุณภาพดี ฉันอ่าน Clean Code ของ Robert Cecil Martin ในบทที่ 3 (ฟังก์ชั่น) มีส่วนในฟังก์ชั่น dyadic นี่คือข้อความที่ตัดตอนมาจากหนังสือ แม้กระทั่งฟังก์ชั่น dyadic ที่เห็นได้ชัดassertEquals(expected, actual)ก็เป็นปัญหา คุณใส่ของจริงกี่ครั้งที่คาดว่าควรจะเป็น? ข้อโต้แย้งทั้งสองไม่มีการเรียงลำดับแบบเป็นธรรมชาติ การจัดลำดับที่คาดหวังและเกิดขึ้นจริงเป็นแบบแผนที่ต้องฝึกปฏิบัติเพื่อเรียนรู้ ผู้เขียนทำให้เป็นจุดที่น่าสนใจ ฉันทำงานในการเรียนรู้ของเครื่องและเจอสิ่งนี้ตลอดเวลา ตัวอย่างเช่นฟังก์ชันเมทริกทั้งหมดในไลบรารี sklearn (อาจเป็นไพ ธ อนไลบรารีที่ใช้มากที่สุดในฟิลด์) กำหนดให้คุณต้องระวังลำดับของอินพุต ในฐานะที่เป็นตัวอย่างsklearn.metrics.homogeneity_scoreจะเป็นปัจจัยการผลิตและlabels_true labels_predฟังก์ชั่นนี้ไม่เกี่ยวข้องมากเกินไปสิ่งที่เกี่ยวข้องก็คือถ้าคุณสลับลำดับของอินพุตจะไม่มีข้อผิดพลาดเกิดขึ้น ในความเป็นจริงการเปลี่ยนอินพุตนั้นเทียบเท่ากับการใช้ฟังก์ชันอื่นในไลบรารี assertEqualsแต่หนังสือเล่มนี้ไม่ได้ไปกล่าวต่อไปว่าการแก้ไขที่เหมาะสมสำหรับการทำงานเช่น ฉันไม่สามารถนึกถึงการแก้ไขสำหรับassertEqualsหรือฟังก์ชั่นที่ฉันมักจะเจออย่างที่อธิบายไว้ข้างต้น แนวปฏิบัติที่ดีในการแก้ไขปัญหานี้คืออะไร
10 functions 

6
ฟังก์ชัน CoffeeScript และตั้งชื่อ
ที่อื่นอาร์กิวเมนต์ได้เกิดขึ้นกับคำศัพท์ของฟังก์ชั่นที่มีชื่อใน CoffeeScript โดยเฉพาะใครบางคนที่พูดถึงสิ่งนี้: foo = -> console.log("bar") เป็นฟังก์ชั่นที่มีชื่อ แต่มันถูกคัดค้านว่าทุกอย่างใน CoffeeScript เป็นฟังก์ชั่นที่ไม่ระบุชื่อและไม่มีฟังก์ชั่นที่มีชื่อ นี่เป็นความจริงแน่นอน CoffeeScript มีเพียงนิพจน์ฟังก์ชันที่สามารถเก็บไว้ในตัวแปรได้ แต่ฉันไม่คิดว่านั่นหมายความว่าการเรียกชื่อฟังก์ชันนี้ผิด อย่างที่ฉันเห็นมันเป็นฟังก์ชั่นที่มีชื่อเพราะฟังก์ชั่นที่ได้รับการตั้งชื่อ จริงมันไม่ใช่ฟังก์ชั่นที่ตั้งชื่อในลักษณะเดียวกับภาษาอื่น ๆ ที่มีชื่อฟังก์ชั่น แต่ฉันคิดว่ามันใกล้พอที่จะเรียกมันว่าฟังก์ชั่นที่มีชื่อไม่เหมาะสม เพื่อยืนยันเป็นอย่างอื่นก็ดูเหมือนว่าจะเป็น nitpicking ฉันออกไปทานข้าวกลางวันด้วยความคิดว่าการยืนยันว่านี่ไม่ใช่ฟังก์ชั่นที่ตั้งชื่อหรือไม่

3
มีเหตุผลที่จะไม่แก้ไขค่าของพารามิเตอร์ที่ส่งผ่านโดยค่าหรือไม่?
มีข้อโต้แย้งวิศวกรรมซอฟต์แวร์ที่สนับสนุนหรือต่อต้านการแก้ไขค่าของพารามิเตอร์ค่าในร่างกายของฟังก์ชันหรือไม่? การทะเลาะวิวาทกันที่เกิดขึ้นซ้ำ ๆ (ส่วนใหญ่สนุกดี) ในทีมของฉันคือควรแก้ไขพารามิเตอร์ที่ส่งผ่านค่าหรือไม่ สมาชิกสองคนของทีมยืนกรานว่าไม่ควรกำหนดพารามิเตอร์เพื่อให้ค่าที่ส่งผ่านไปยังฟังก์ชันสามารถสอบปากคำได้เสมอ ฉันไม่เห็นด้วยและถือว่าพารามิเตอร์ไม่มีอะไรมากไปกว่าตัวแปรท้องถิ่นที่เริ่มต้นด้วยไวยากรณ์ของการเรียกใช้เมธอด หากค่าดั้งเดิมของพารามิเตอร์ by-value มีความสำคัญกว่าตัวแปรท้องถิ่นสามารถประกาศเพื่อเก็บค่านี้ไว้อย่างชัดเจน ฉันไม่มั่นใจว่าเราสองคนได้รับการสนับสนุนที่ดีสำหรับตำแหน่งของเรา นี่เป็นความขัดแย้งทางศาสนาที่ไม่สามารถแก้ไขได้หรือมีเหตุผลทางวิศวกรรมซอฟต์แวร์ที่ดีทั้งในทิศทางใดทิศทางหนึ่งหรือไม่? หมายเหตุ: คำถามของหลักการยังคงอยู่โดยไม่คำนึงถึงรายละเอียดการใช้งานของภาษานั้น ๆ ใน JavaScript เช่นที่รายการอาร์กิวเมนต์เป็นไดนามิกเสมอพารามิเตอร์สามารถถือได้ว่าเป็นน้ำตาล syntactic สำหรับการเริ่มต้นตัวแปรท้องถิ่นจากargumentsวัตถุ ถึงกระนั้นใคร ๆ ก็สามารถปฏิบัติต่อตัวระบุพารามิเตอร์ที่ประกาศว่าเป็น "พิเศษ" เพราะพวกเขายังคงจับภาพการส่งผ่านข้อมูลจากผู้โทรไปยังผู้รับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.