మాడ్యూల్ పాఠాలు (2/5)
బహుళ రిటర్న్లు మరియు పేరున్న రిటర్న్లు
Goలో, ఒక ఫంక్షన్ బహుళ విలువలను అందించగలదు. ఇది యంత్రాంగం
మీరు ఇప్పటికే చూసిన (value, error) నమూనాను ప్రారంభిస్తుంది మరియు అది వ్యాపిస్తుంది
మొత్తం ప్రామాణిక లైబ్రరీ.
బహుళ రాబడి
రిటర్న్ రకాలు కుండలీకరణాల మధ్య ఉంటాయి, కామాతో వేరు చేయబడ్డాయి:
func divmod(a, b int) (int, int) {
return a / b, a % b
}
q, r := divmod(17, 5) // q=3, r=2అవి బహుళ అసైన్మెంట్తో నాశనం చేయబడ్డాయి. వాటిలో ఒకదాన్ని విస్మరించడానికి
విలువలు _ని ఉపయోగిస్తాయి:
_, r := divmod(17, 5) // solo il restoనియమానుగుణ (T, error) నమూనా
దాదాపు అన్ని stdlib దీనిని అనుసరిస్తుంది. error ఎల్లప్పుడూ చివరిది:
func read(path string) ([]byte, error) {
data, err := os.ReadFile(path)
if err != nil {
return nil, fmt.Errorf("read %q: %w", path, err)
}
return data, nil
}రిటర్న్స్ అని పేరు పెట్టారు
మీరు రిటర్న్ విలువలకు పేరు పెట్టవచ్చు: అవి ముందుగా ప్రకటించిన వేరియబుల్స్గా మారతాయి
సున్నాకి ప్రారంభించబడింది మరియు return ఆర్గ్యుమెంట్లు లేకుండా వాటిని ("నగ్నంగా) అందిస్తుంది
తిరిగి"):
func divmod(a, b int) (q, r int) {
q = a / b
r = a % b
return // naked: ritorna q, r
}పేరున్న రిటర్న్లు డాక్యుమెంటేషన్ టూల్టిప్లలో కూడా కనిపిస్తాయి, కాబట్టి అవి ఉపయోగకరంగా ఉంటాయి సంక్లిష్టమైన ఫంక్షన్ల కోసం ఇన్లైన్ డాక్యుమెంటేషన్ రూపంగా — కేవలం కాదు నగ్నంగా తిరిగి రావడం కోసం.
రెండు కంటే ఎక్కువ రాబడి?
(int, int, int, error) నుండి మిమ్మల్ని ఏదీ ఆపదు, కానీ మీకు అవసరమైతే
ఇది దాదాపు ఎల్లప్పుడూ మీరు ** నిర్మాణం**ని తిరిగి ఇవ్వాల్సిన సంకేతం:
type Result struct {
Sum int
Avg float64
Max int
}
func analyze(nums []int) (Result, error) { ... }దీనిని ప్రయత్నించండి
గుణకం మరియు శేషాన్ని అందించే divmod(a, b int) (int, int)ని నిర్వచించండి.
సూచనను చూపించు
కుండలీకరణాల మధ్య రీటర్న్ రకాలు: `(int, int)`.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
safeDiv(a, b int) (int, ఎర్రర్)ని అమలు చేయండి: b == 0 తిరిగి వస్తే (0, errors.New('divisione per Zer')), లేకపోతే (a/b, nil).
సూచనను చూపించు
లోపం ఎల్లప్పుడూ చివరి విలువగా ఉంటుంది. లోపంపై: సున్నా విలువ + లోపం.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
పేరు పెట్టబడిన రిటర్న్లను ఉపయోగించి ఈ ప్రోగ్రామ్ ఏమి ప్రింట్ చేస్తుంది?
func f() (a, b int) {
a = 1
b = 2
return
}
x, y := f()
fmt.Println(x, y)రీక్యాప్
- కుండలీకరణాల మధ్య బహుళ విలువలు:
func f() (T1, T2, error). - సమావేశం:
errorఎల్లప్పుడూ చివరి విలువగా; లోపంపై, సున్నా విలువ + లోపం. - పేరున్న రిటర్న్లు వేరియబుల్స్ను ముందే డిక్లేర్ చేస్తాయి మరియు నేకెడ్ రిటర్న్లను ఎనేబుల్ చేస్తాయి.
- చాలా తక్కువ ఫంక్షన్లలో మాత్రమే నేకెడ్ రిటర్న్స్; అంతకు మించి, చదివే సామర్థ్యం దెబ్బతింటుంది.
- 2-3 కంటే ఎక్కువ రాబడి? మీరు బహుశా ఒక నిర్మాణం కావాలి.