рдЧреЗрд▓реНрдпрд╛ рдХрд╛рд╣реА рдорд╣рд┐рдиреНрдпрд╛рдВрдкрд╛рд╕реВрди рдореА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдЧреЛ рд╡рд╛рдкрд░рдд рдЖрд╣реЗ.
рдХрдордХреБрд╡рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ?
рдЧреЛ рд╢рд┐рдХрдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ, рдЗрддрдХреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ рдХреА рдкрд░рд┐рдЪрдп рдорд▓рд╛ рдПрдХрд╛ рд╕рдВрдзреНрдпрд╛рдХрд╛рд│реА рдШреЗрдКрди рдЧреЗрд▓рд╛, рддреНрдпрд╛рдирдВрддрд░ рдореА рдЖрдзреАрдЪ рдЙрддреНрдкрд╛рджрдХрдкрдгреЗ рдХреЛрдб рдХрд░реВ рд╢рдХрд▓реЛ. рдореА рдЧреЛ рд╢рд┐рдХрд╛рдпрдЪреЗ рддреЗ рдкреБрд╕реНрддрдХ рдореНрд╣рдгрддрд╛рдд
рдЧреБрдЧрд▓рдЪрд╛ рджрд╛рд╡рд╛ рдЖрд╣реЗ рдХреА рдЧреЛ рдЪреА рд╕рд╛рдзреЗрдкрдгрд╛ рд╣рд╛ рддреНрдпрд╛рдЪрд╛ рд╡рд┐рдХреНрд░реА рдмрд┐рдВрджреВ рдЖрд╣реЗ рдЖрдгрд┐ рднрд╛рд╖рд╛ рдореЛрдареНрдпрд╛ рд╕рдВрдШрд╛рдВрдордзреНрдпреЗ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ, рдкрд░рдВрддреБ рдорд▓рд╛ рд╢рдВрдХрд╛ рдЖрд╣реЗ. рдЕрд╢реА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдЖрд╣реЗрдд рдЬреА рдПрдХрддрд░ рдЧрд╣рд╛рд│ рдЖрд╣реЗрдд рдХрд┐рдВрд╡рд╛ рдЬрд╛рд╕реНрдд рддрдкрд╢реАрд▓рд╡рд╛рд░ рдЖрд╣реЗрдд. рдЖрдгрд┐ рд╣реЗ рд╕рд░реНрд╡ рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рддреЗ рдХрд╛рд╣реА рдпреЛрдЧреНрдп рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реАрдд рдпрд╛ рдЧреГрд╣реАрддрдХрд╛рдиреЗ. рд╕рд╛рдзреЗрдкрдгрд╛рдЪреА рд╣реА рдЗрдЪреНрдЫрд╛ рд╣рд╛ рднрд╛рд╖реЗрдЪреНрдпрд╛ рдбрд┐рдЭрд╛рдЗрдирд░рдЪрд╛ рдЬрд╛рдгреАрд╡рдкреВрд░реНрд╡рдХ рдШреЗрддрд▓реЗрд▓рд╛ рдирд┐рд░реНрдгрдп рд╣реЛрддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рдЧрд░рдЬ рдХрд╛ рдЖрд╣реЗ рд╣реЗ рдкреВрд░реНрдгрдкрдгреЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдЪреА рдкреНрд░реЗрд░рдгрд╛ рдЖрдгрд┐ рддреЗ Go рдордзреНрдпреЗ рдХрд╛рдп рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рд╣реЛрддреЗ рд╣реЗ рдЖрдкрдг рд╕рдордЬреВрди рдШреЗрддрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.
рдордЧ рддреЗ рдЗрддрдХреЗ рд╕реЛрдкреЗ рдХрд╛ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ? рдпреЗрдереЗ рдХрд╛рд╣реА рдХреЛрдЯ рдЖрд╣реЗрдд
рдпреЗрдереЗ рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдЖрдордЪреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ (рдЕрдВрджрд╛рдЬреЗ:
Googlers ) рд╕рдВрд╢реЛрдзрдХ рдирд╛рд╣реАрдд. рддреЗ, рдирд┐рдпрдорд╛рдиреБрд╕рд╛рд░, рдЕрдЧрджреА рддрд░реБрдг рдЖрд╣реЗрдд, рдЕрднреНрдпрд╛рд╕ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдпреЗрддрд╛рдд, рдХрджрд╛рдЪрд┐рдд рддреНрдпрд╛рдВрдиреА Java, рдХрд┐рдВрд╡рд╛ C/C++, рдХрд┐рдВрд╡рд╛ Python рдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХреЗрд▓рд╛ рдЕрд╕реЗрд▓. рддреНрдпрд╛рдВрдирд╛ рдЙрддреНрддрдо рднрд╛рд╖рд╛ рд╕рдордЬреВ рд╢рдХрдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рддреНрдпрд╛рдВрдиреА рдЪрд╛рдВрдЧрд▓реЗ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ рдЕрд╢реА рдЖрдордЪреА рдЗрдЪреНрдЫрд╛ рдЖрд╣реЗ. рдореНрд╣рдгреВрдирдЪ рддреНрдпрд╛рдВрдЪреА рднрд╛рд╖рд╛ рддреНрдпрд╛рдВрдирд╛ рд╕рдордЬрдгреНрдпрд╛рд╕ рд╡ рд╢рд┐рдХрдгреНрдпрд╛рд╕ рд╕реЛрдкреА рдЕрд╕рд╛рд╡реА.
рддреЛ рдкрд░рд┐рдЪрд┐рдд рдЕрд╕рд╛рд╡рд╛, рдЕрдВрджрд╛рдЬреЗ рд╕реА рд╕рд╛рд░рдЦрд╛рдЪ рдмреЛрд▓рддреЛ. Google рд╡рд░ рдХрд╛рдо рдХрд░рдгрд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рддреНрдпрд╛рдВрдЪреЗ рдХрд░рд┐рдЕрд░ рд▓рд╡рдХрд░ рд╕реБрд░реВ рдХрд░рддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдореБрдЦреНрдпрддрдГ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рднрд╛рд╖рд╛, рд╡рд┐рд╢реЗрд╖рддрдГ C рдХреБрдЯреБрдВрдмрд╛рд╢реА рдкрд░рд┐рдЪрд┐рдд рдЕрд╕рддрд╛рдд. рдирд╡реАрди рдкреНрд░реЛрдЧреНрд░реЕрдорд┐рдВрдЧ рднрд╛рд╖реЗрдд рдЬрд▓рдж рдЙрддреНрдкрд╛рджрдирдХреНрд╖рдорддреЗрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореНрд╣рдгрдЬреЗ рднрд╛рд╖рд╛ рдЦреВрдк рдореВрд▓рдЧрд╛рдореА рдЕрд╕реВ рдирдпреЗ.
рдХрд╛рдп? рддреНрдпрд╛рдореБрд│реЗ рд░реЙрдм рдкрд╛рдИрдХ рдореБрд│рд╛рдд рдЕрд╕реЗ рдореНрд╣рдгрдд рдЖрд╣реЗрдд рдХреА Google рдордзреАрд▓ рд╡рд┐рдХрд╕рдХ рдЗрддрдХреЗ рдЪрд╛рдВрдЧрд▓реЗ рдирд╛рд╣реАрдд, рдореНрд╣рдгреВрдирдЪ рддреНрдпрд╛рдВрдиреА рдореВрд░реНрдЦрд╛рдВрд╕рд╛рдареА рдПрдХ рднрд╛рд╖рд╛ рддрдпрд╛рд░ рдХреЗрд▓реА (рдЕрдВрджрд╛рдЬреЗ: рдбрдВрдм рдбрд╛рдЙрди) рдЬреЗрдгреЗрдХрд░реВрди рддреЗ рдХрд╛рд╣реАрддрд░реА рдХрд░реВ рд╢рдХрддреАрд▓. рдЖрдкрд▓реНрдпрд╛рдЪ рд╕рд╣рдХрд╛рд▒реНрдпрд╛рдВрдХрдбреЗ рдХрд╕рд▓реЗ рдЙрджреНрдзрдЯ рдирдЬрд░реЗрдиреЗ рдмрдШрд╛рдпрдЪреЗ? рдорд╛рдЭрд╛ рдиреЗрд╣рдореАрдЪ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЖрд╣реЗ рдХреА Google рдЪреЗ рдбреЗрд╡реНрд╣рд▓рдкрд░ рд╣реЗ рдкреГрдереНрд╡реАрд╡рд░реАрд▓ рд╕рд░реНрд╡рд╛рдд рддреЗрдЬрд╕реНрд╡реА рдЖрдгрд┐ рд╕рд░реНрд╡реЛрддреНрддрдо рд▓реЛрдХрд╛рдВрдордзреВрди рдирд┐рд╡рдбрд▓реЗрд▓реЗ рдЖрд╣реЗрдд. рдирдХреНрдХреАрдЪ рддреЗ рдХрд╛рд╣реАрддрд░реА рдЕрдзрд┐рдХ рдХрдареАрдг рд╣рд╛рддрд╛рд│реВ рд╢рдХрддрд╛рдд?
рдЕрддреНрдпрд╛рдзрд┐рдХ рд╕рд╛рдзреЗрдкрдгрд╛рдЪреА рдХрд▓рд╛рдХреГрддреА
рдХреЛрдгрддреНрдпрд╛рд╣реА рдбрд┐рдЭрд╛рдЗрдирдордзреНрдпреЗ рд╕рд╛рдзреЗ рдЕрд╕рдгреЗ рд╣реЗ рдПрдХ рдпреЛрдЧреНрдп рдзреНрдпреЗрдп рдЖрд╣реЗ рдЖрдгрд┐ рдХрд╛рд╣реАрддрд░реА рд╕реЛрдкреЗ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреЗ рдХрдареАрдг рдЖрд╣реЗ. рддрдерд╛рдкрд┐, рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рдгреНрдпрд╛рдЪрд╛ (рдХрд┐рдВрд╡рд╛ рдЕрдЧрджреА рд╡реНрдпрдХреНрдд) рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛рдирд╛, рдХрдзреАрдХрдзреА рдПрдХ рдЬрдЯрд┐рд▓ рд╕рд╛рдзрди рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ. рдЬрдЯрд┐рд▓рддрд╛ рдЖрдгрд┐ рдЧреБрдВрддрд╛рдЧреБрдВрдд рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖реЗрдЪреА рд╕рд░реНрд╡реЛрддреНрдХреГрд╖реНрдЯ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдирд╛рд╣реАрдд, рдкрд░рдВрддреБ рдПрдХ рдордзреНрдпрдо рдореИрджрд╛рди рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рднрд╛рд╖рд╛ рд╕рдордЬрдгреНрдпрд╛рд╕ рдЖрдгрд┐ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕реБрд▓рдн рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдореЛрд╣рдХ рдЕрдореВрд░реНрддрддрд╛ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЗ.
рдлрд╛рд░ рд╡реНрдпрдХреНрдд рдирд╛рд╣реА
рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рд╛рдзреЗрдкрдгрд╛рдЪреНрдпрд╛ рдмрд╛рдВрдзрд┐рд▓рдХреАрдореБрд│реЗ, Go рдордзреНрдпреЗ рдЗрддрд░ рднрд╛рд╖рд╛рдВрдордзреНрдпреЗ рдиреИрд╕рд░реНрдЧрд┐рдХ рд╕рдордЬрд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рд░рдЪрдирд╛рдВрдЪрд╛ рдЕрднрд╛рд╡ рдЖрд╣реЗ. рд╣реЗ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдПрдХ рдЪрд╛рдВрдЧрд▓реА рдХрд▓реНрдкрдирд╛ рд╡рд╛рдЯреВ рд╢рдХрддреЗ, рдкрд░рдВрддреБ рд╕рд░рд╛рд╡ рдордзреНрдпреЗ рдпрд╛рдЪрд╛ рдкрд░рд┐рдгрд╛рдо рд╢рдмреНрджрд╢рдГ рдХреЛрдбрдордзреНрдпреЗ рд╣реЛрддреЛ. рдпрд╛рдЪреЗ рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рдЕрд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ - рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдирд╛ рдЗрддрд░ рд▓реЛрдХрд╛рдВрдЪреЗ рдХреЛрдб рд╡рд╛рдЪрдгреЗ рд╕реЛрдкреЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд╣реА рд╕рд░рд▓реАрдХрд░рдгреЗ рдХреЗрд╡рд│ рд╡рд╛рдЪрдиреАрдпрддреЗрд▓рд╛ рд╣рд╛рдиреА рдкреЛрд╣реЛрдЪрд╡рддрд╛рдд. рдЧреЛ рдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА рд╕рдВрдХреНрд╖реЗрдк рдирд╛рд╣реАрдд: рдПрдХрддрд░ рдЦреВрдк рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реАрд╣реА рдирд╛рд╣реА.
рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХрдВрд╕реЛрд▓ рдпреБрдЯрд┐рд▓рд┐рдЯреА рдЬреА stdin рд╡рд╛рдЪрддреЗ рдХрд┐рдВрд╡рд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯреНрд╕рдордзреАрд▓ рдлрд╛рдЗрд▓ рдпрд╛рд╕рд╛рд░рдЦреА рджрд┐рд╕реЗрд▓:
package main
import (
"bufio"
"flag"
"fmt"
"log"
"os"
)
func main() {
flag.Parse()
flags := flag.Args()
var text string
var scanner *bufio.Scanner
var err error
if len(flags) > 0 {
file, err := os.Open(flags[0])
if err != nil {
log.Fatal(err)
}
scanner = bufio.NewScanner(file)
} else {
scanner = bufio.NewScanner(os.Stdin)
}
for scanner.Scan() {
text += scanner.Text()
}
err = scanner.Err()
if err != nil {
log.Fatal(err)
}
fmt.Println(text)
}
рдЬрд░реА рд╣рд╛ рдХреЛрдб рд╢рдХреНрдп рддрд┐рддрдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЕрд╕рд▓рд╛ рддрд░реА, Go рдЪреА рд╕рдХреНрддреАрдЪреА рд╢рдмреНрджрд╢рдГ рдЕрдбрдерд│реЗ рдпреЗрддрд╛рдд рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдореА, рдПрдХ рд╕рд╛рдзреА рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рд▓реНрдпрд╛рдиреЗ рдХреЛрдб рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдорд┐рд│рддреЛ.
рдпреЗрдереЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдордзреНрдпреЗ рд╕рдорд╛рди рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдЖрд╣реЗ
import std.stdio, std.array, std.conv;
void main(string[] args)
{
try
{
auto source = args.length > 1 ? File(args[1], "r") : stdin;
auto text = source.byLine.join.to!(string);
writeln(text);
}
catch (Exception ex)
{
writeln(ex.msg);
}
}
рдЖрдгрд┐ рдЖрддрд╛ рдХреЛрдг рдЬрд╛рд╕реНрдд рд╡рд╛рдЪрдиреАрдп рдЖрд╣реЗ? рдореА рдорд╛рдЭреЗ рдордд рдбреА рд▓рд╛ рджреЗрдИрди. рддреНрдпрд╛рдЪрд╛ рдХреЛрдб рдЕрдзрд┐рдХ рд╡рд╛рдЪрдиреАрдп рдЖрд╣реЗ рдХрд╛рд░рдг рддреЛ рдХреНрд░рд┐рдпрд╛рдВрдЪреЗ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ. рдбреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрдХрд▓реНрдкрдирд╛ рд╡рд╛рдкрд░рддреЗ (рдЕрдВрджрд╛рдЬреЗ:
рдХреЙрдкреА рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд░рдХ
рдЧреЛ рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реВрдЪрдирд╛ рдореНрд╣рдгрдЬреЗ рд╕рд╛рдорд╛рдиреНрдпрддрд╛. рд╣реЗ рд╕рд░реНрд╡ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдбрдЪреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЙрдкреА рдЯрд╛рд│рдгреНрдпрд╛рд╕ рдХрд┐рдорд╛рди рдорджрдд рдХрд░реЗрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреВрд░реНрдгрд╛рдВрдХрд╛рдВрдЪреНрдпрд╛ рд╕реВрдЪреАрдЪреА рдмреЗрд░реАрдЬ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдлрдВрдХреНрд╢рди рдкреНрд░рддреНрдпреЗрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░рд╛рд╕рд╛рдареА рддреНрдпрд╛рдЪреЗ рдореВрд▓рднреВрдд рдХрд╛рд░реНрдп рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдгреНрдпрд╛рд╢рд┐рд╡рд╛рдп рдЗрддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХрд╛рд░реЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА; рджреБрд╕рд░рд╛ рдХреЛрдгрддрд╛рд╣реА рдорд╛рд░реНрдЧ рдирд╛рд╣реА:
package main
import "fmt"
func int64Sum(list []int64) (uint64) {
var result int64 = 0
for x := 0; x < len(list); x++ {
result += list[x]
}
return uint64(result)
}
func int32Sum(list []int32) (uint64) {
var result int32 = 0
for x := 0; x < len(list); x++ {
result += list[x]
}
return uint64(result)
}
func int16Sum(list []int16) (uint64) {
var result int16 = 0
for x := 0; x < len(list); x++ {
result += list[x]
}
return uint64(result)
}
func int8Sum(list []int8) (uint64) {
var result int8 = 0
for x := 0; x < len(list); x++ {
result += list[x]
}
return uint64(result)
}
func main() {
list8 := []int8 {1, 2, 3, 4, 5}
list16 := []int16{1, 2, 3, 4, 5}
list32 := []int32{1, 2, 3, 4, 5}
list64 := []int64{1, 2, 3, 4, 5}
fmt.Println(int8Sum(list8))
fmt.Println(int16Sum(list16))
fmt.Println(int32Sum(list32))
fmt.Println(int64Sum(list64))
}
рдЖрдгрд┐ рд╣реЗ рдЙрджрд╛рд╣рд░рдг рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╛рдареА рджреЗрдЦреАрд▓ рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА. рд╣рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рд╕реНрд╡рддрдГрдЪреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рддрддреНрддреНрд╡рд╛рдЪреЗ рдкреВрд░реНрдгрдкрдгреЗ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЛ (
рдбреА рд╡рд░ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг:
import std.stdio;
import std.algorithm;
void main(string[] args)
{
[1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}
рд╕рд╛рдзреЗ, рдореЛрд╣рдХ рдЖрдгрд┐ рд╕рд░рд│ рдореБрджреНрджреНрдпрд╛рдкрд░реНрдпрдВрдд. рдпреЗрдереЗ рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рдХрд╛рд░реНрдп рдЖрд╣реЗ reduce
рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рдХрд╛рд░ рдЖрдгрд┐ рдкреНрд░реЗрдбрд┐рдХреЗрдЯрд╕рд╛рдареА. рд╣реЛрдп, рд╣реЗ рдЧреЛ рдЖрд╡реГрддреНрддреАрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдХреНрд▓рд┐рд╖реНрдЯ рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдирд╛ рд╕рдордЬрдгреЗ рдЗрддрдХреЗ рдЕрд╡рдШрдб рдирд╛рд╣реА. рдХреЛрдгрддреЗ рдЙрджрд╛рд╣рд░рдг рд░рд╛рдЦрдгреЗ рд╕реЛрдкреЗ рдЖрдгрд┐ рд╡рд╛рдЪрдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ?
рд╕рд┐рдВрдкрд▓ рдЯрд╛рдИрдк рд╕рд┐рд╕реНрдЯрдо рдмрд╛рдпрдкрд╛рд╕
рдорд▓рд╛ рдХрд▓реНрдкрдирд╛ рдЖрд╣реЗ рдХреА рд╣реЗ рд╡рд╛рдЪреВрди рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рддреЛрдВрдбрд╛рд▓рд╛ рдлреЗрд╕ рдЖрдгрдд рдЕрд╕рддреАрд▓ рдЖрдгрд┐ рдУрд░рдбрддреАрд▓, "рддреБрдореНрд╣реА рд╣реЗ рдЪреБрдХреАрдЪреЗ рдХрд░рдд рдЖрд╣рд╛рдд!" рдмрд░рдВ, рдЬреЗрдиреЗрд░рд┐рдХ рдлрдВрдХреНрд╢рди рдЖрдгрд┐ рдкреНрд░рдХрд╛рд░ рдмрдирд╡рдгреНрдпрд╛рдЪрд╛ рдЖрдгрдЦреА рдПрдХ рдорд╛рд░реНрдЧ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдкреВрд░реНрдгрдкрдгреЗ рдЦрдВрдбрд┐рдд рдХрд░рддреЛ!
рд╕рдорд╕реНрдпреЗрд╡рд░ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореВрд░реНрдЦ рднрд╛рд╖реЗрдЪреНрдпрд╛ рдирд┐рд░рд╛рдХрд░рдгрд╛рдЪреНрдпрд╛ рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░ рдПрдХ рдирдЬрд░ рдЯрд╛рдХрд╛:
package main
import "fmt"
import "reflect"
func Reduce(in interface{}, memo interface{}, fn func(interface{}, interface{}) interface{}) interface{} {
val := reflect.ValueOf(in)
for i := 0; i < val.Len(); i++ {
memo = fn(val.Index(i).Interface(), memo)
}
return memo
}
func main() {
list := []int{1, 2, 3, 4, 5}
result := Reduce(list, 0, func(val interface{}, memo interface{}) interface{} {
return memo.(int) + val.(int)
})
fmt.Println(result)
}
рд╣реА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА Reduce
рд▓реЗрдЦрд╛рддреВрди рдШреЗрддрд▓реЗ рд╣реЛрддреЗ interface{}
- рдПрдХ рдкреНрд░рд╣рд╕рди, рдЖрдгрд┐ рднрд╛рд╖реЗрдд рддреЗ рдлрдХреНрдд рдЯрд╛рдпрдкрд┐рдВрдЧрд▓рд╛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣рд╛ рдПрдХ рд░рд┐рдХрд╛рдорд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрд╣реЗ рдЖрдгрд┐ рд╕рд░реНрд╡ рдкреНрд░рдХрд╛рд░ рддреЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрддрд╛рдд, рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдкреВрд░реНрдг рд╕реНрд╡рд╛рддрдВрддреНрд░реНрдп рджреЗрддреЗ. рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрдЪреА рд╣реА рд╢реИрд▓реА рднрдпрдВрдХрд░ рдХреБрд░реВрдк рдЖрд╣реЗ рдЖрдгрд┐ рдЗрддрдХреЗрдЪ рдирд╛рд╣реА. рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдЕтАНреЕрдХреНрд░реЛрдмреЕрдЯрд┐рдХ рдкрд░рд╛рдХреНрд░рдорд╛рдВрд╕рд╛рдареА рд░рдирдЯрд╛рдЗрдо рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рд╡рд╛рдкрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд░реЙрдм рдкрд╛рдИрдХрд▓рд╛ рджреЗрдЦреАрд▓ рдЕрд╢рд╛ рд╡реНрдпрдХреНрддреАрдВрдирд╛ рдЖрд╡рдбрдд рдирд╛рд╣реА рдЬреЗ рдпрд╛рдЪрд╛ рдЧреИрд░рд╡рд╛рдкрд░ рдХрд░рддрд╛рдд, рдЬрд╕реЗ рдХреА рддреНрдпрд╛рдВрдиреА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдПрдХрд╛ рдЕрд╣рд╡рд╛рд▓рд╛рдд рдирдореВрдж рдХреЗрд▓реЗ рдЖрд╣реЗ.
рд╣реЗ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд╛рдзрди рдЖрд╣реЗ рдЬреЗ рд╕рд╛рд╡рдзрдЧрд┐рд░реАрдиреЗ рд╡рд╛рдкрд░рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. рдХрдареЛрд░рдкрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдирд╕рд▓реНрдпрд╛рд╕ рддреЗ рдЯрд╛рд│рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.
рдореА рдпрд╛ рдореВрд░реНрдЦрдкрдгрд╛рдРрд╡рдЬреА рдбреА рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдШреЗрдИрди. рдЕрд╕реЗ рдХреЛрдгреА рдХрд╕реЗ рдореНрд╣рдгреЗрд▓ interface{}
рдЕрдзрд┐рдХ рд╡рд╛рдЪрдиреАрдп рдХрд┐рдВрд╡рд╛ рдЕрдЧрджреА рд╕реБрд░рдХреНрд╖рд┐рдд рдЯрд╛рдЗрдк рдХрд░рд╛?
рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд╛рдЪреЗ рд╕рдВрдХрдЯ
Go рдордзреНрдпреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдЕрдВрдЧрднреВрдд рдЕрд╡рд▓рдВрдмрди рдкреНрд░рдгрд╛рд▓реА рдЖрд╣реЗ
рдпрд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╢реНрди рд╡рд┐рдЪрд╛рд░рд▓реНрдпрд╛рдирдВрддрд░, рдЧреЛ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдЯреАрдо рддрдпрд╛рд░ рдХреЗрд▓реА
рд╢реА рдкрд╛рд╕реВрди рд╕рд╛рдВрд╕реНрдХреГрддрд┐рдХ рд╕рд╛рдорд╛рди
рдорд╛рдЭреНрдпрд╛ рдорддреЗ, рдЬреНрдпрд╛рдВрдиреА рдЖрдпреБрд╖реНрдпрднрд░ C рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЖрдгрд┐ рдЬреНрдпрд╛рдВрдирд╛ рдХрд╛рд╣реАрддрд░реА рдирд╡реАрди рдХрд░реВрди рдкрд╣рд╛рдпрдЪреЗ рдирд╡реНрд╣рддреЗ рдЕрд╢рд╛ рд▓реЛрдХрд╛рдВрджреНрд╡рд╛рд░реЗ Go рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ. рднрд╛рд╖реЗрдЪреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд╛рдХрд╛рдВрд╕рд╣ C рдЕрд╕реЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ(рдореВрд│:
рдЖрдгрдЦреА рдПрдХ рддреНрд░рд╛рд╕рджрд╛рдпрдХ рд╕рдорд╕реНрдпрд╛ рдЕрд╢реА рдЖрд╣реЗ рдХреА рдЧреЛ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рднрд╛рд╖рд╛ рдЖрд╣реЗ (C рдЪреНрдпрд╛ рдореВрдХ рднрдпрдкрдЯ рд╕рд╛рд░рдЦреА). рддреБрдореНрд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╢реИрд▓реАрдд рдХреЛрдб рд▓рд┐рд╣рд┐рддрд╛ рдЬреЗ рдкреБрд░рд╛рддрди рдЖрдгрд┐ рдЬреБрдиреЗ рд╡рд╛рдЯрддреЗ. рдорд▓рд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реА рд╕рд┐рд▓реНрд╡реНрд╣рд░ рдмреБрд▓реЗрдЯ рдирд╛рд╣реА, рдкрд░рдВрддреБ рддрдкрд╢реАрд▓рд╛рдВрдЪреЗ рдкреНрд░рдХрд╛рд░рд╛рдВрдордзреНрдпреЗ рдЧреЛрд╖рд╡рд╛рд░рд╛ рджреЗрдгреЗ рдЖрдгрд┐ рдПрдиреНрдХреЕрдкреНрд╕реБрд▓реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рдЦреВрдк рдЪрд╛рдВрдЧрд▓реЗ рд╣реЛрдИрд▓.
рдЖрдкрд▓реНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдлрд╛рдпрджреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рдзреЗрдкрдгрд╛
Go рдЪреА рд░рдЪрдирд╛ рд╕реЛрдкреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓реА рдЧреЗрд▓реА рд╣реЛрддреА рдЖрдгрд┐ рддреА рддреНрдпрд╛ рдзреНрдпреЗрдпрд╛рдд рдпрд╢рд╕реНрд╡реА рд╣реЛрддреЗ. рд╣реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореНрд╣рдгреВрди рдЬреБрдиреА рднрд╛рд╖рд╛ рд╡рд╛рдкрд░реВрди рдХрдордХреБрд╡рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╕рд╛рдареА рд▓рд┐рд╣рд┐рд▓реЗ рд╣реЛрддреЗ. рд╕реЛрдкреНрдпрд╛ рдЧреЛрд╖реНрдЯреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рд╕рд╛рдзреНрдпрд╛ рд╕рд╛рдзрдирд╛рдВрд╕рд╣ рдкреВрд░реНрдг рд╣реЛрддреЗ. рд╣реЗ рд╡рд╛рдЪрдгреНрдпрд╛рд╕ рд╕реЛрдкреЗ рдЖрдгрд┐ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕реЛрдкреЗ рдЖрд╣реЗ.
рд╣реЗ рдЕрддреНрдпрдВрдд рд╢рдмреНрджрд╢рдГ, рдЕрдкреНрд░рднрд╛рд╡реА рдЖрдгрд┐ рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╕рд╛рдареА рд╡рд╛рдИрдЯ рдЖрд╣реЗ.
╨б╨┐╨░╤Б╨╕╨▒╨╛
рд╕реНрддреНрд░реЛрдд: www.habr.com