рд╡рд┐рдЧрддрдХрд╛ рдорд╣рд┐рдирд╛рд╣рд░реВрдорд╛ рдореИрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд╛ рд▓рд╛рдЧрд┐ Go рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫреБред
рдХрдордЬреЛрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рд╣реЛ?
рдЧреЛ рд╕рд┐рдХреНрди рдзреЗрд░реИ рд╕рдЬрд┐рд▓реЛ рдЫ, рдпрддрд┐ рд╕рдЬрд┐рд▓реЛ рдЫ рдХрд┐ рдкрд░рд┐рдЪрдп рдорд▓рд╛рдИ рдПрдХ рд╕рд╛рдБрдЭ рд▓рдЧреНрдпреЛ, рддреНрдпрд╕рдкрдЫрд┐ рдореИрд▓реЗ рдЙрддреНрдкрд╛рджрдХ рд░реВрдкрдорд╛ рдХреЛрдб рдЧрд░реНрди рд╕рдХреНрдереЗрдВред рдореИрд▓реЗ рдЧреЛ рд╕рд┐рдХреНрдиреЗ рдкреБрд╕реНрддрдХ рднрдирд┐рдиреНрдЫ
рдЧреБрдЧрд▓рд▓реЗ рдЧреЛрдХреЛ рд╕рд░рд▓рддрд╛ рдпрд╕рдХреЛ рдмрд┐рдХреНрд░реА рдмрд┐рдиреНрджреБ рд╣реЛ рд░ рднрд╛рд╖рд╛ рдареВрд▓рд╛ рдЯреЛрд▓реАрд╣рд░реВрдорд╛ рдЕрдзрд┐рдХрддрдо рдЙрддреНрдкрд╛рджрдХрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рджрд╛рдмреА рдЧрд░реНрджрдЫ, рддрд░ рдорд▓рд╛рдИ рд╢рдВрдХрд╛ рдЫред рддреНрдпрд╣рд╛рдБ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдЫрдиреН рдЬреБрди рдпрд╛ рдд рд╣рд░рд╛рдЗрд░рд╣реЗрдХреЛ рдЫ рд╡рд╛ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЫред рд░ рд╕рдмреИ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдорд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕рдХреЛ рдХрдореАрдХреЛ рдХрд╛рд░рдг, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдХреЗрд╣рд┐ рдкрдирд┐ рдЧрд░реНрди рд╕рдХреНрд╖рдо рдЫреИрдирдиреН рднрдиреНрдиреЗ рдзрд╛рд░рдгрд╛рдХреЛ рд╕рд╛рдеред рд╕рд░рд▓рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдЪрд╛рд╣рдирд╛ рднрд╛рд╖рд╛рдХреЛ рдбрд┐рдЬрд╛рдЗрдирд░рд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рдЪреЗрдд рдирд┐рд░реНрдгрдп рдерд┐рдпреЛ, рд░ рдпреЛ рдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдерд┐рдпреЛ рднрдиреЗрд░ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдкреНрд░реЗрд░рдгрд╛ рд░ рдЙрдиреАрд╣рд░реВрд▓реЗ Go рдорд╛ рд╣рд╛рд╕рд┐рд▓ рдЧрд░реНрди рдЦреЛрдЬрд┐рд░рд╣реЗрдХрд╛ рдерд┐рдП рднрдиреЗрд░ рдмреБрдЭреНрдиреБрдкрд░реНрдЫред
рддреНрдпрд╕реЛрднрдП рдХрд┐рди рдпреЛ рдпрддрд┐ рд╕рд░рд▓ рдмрдирд╛рдЗрдпреЛ? рдпрд╣рд╛рдБ рдХреЗрд╣реА рдЙрджреНрдзрд░рдгрд╣рд░реВ рдЫрдиреН
рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдХреБрд░рд╛ рдпреЛ рд╣реЛ рдХрд┐ рд╣рд╛рдореНрд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВ (рд▓рдЧрднрдЧред:
Googlers ) рдЕрдиреБрд╕рдиреНрдзрд╛рдирдХрд░реНрддрд╛ рд╣реЛрдЗрдирдиреНред рддрд┐рдиреАрд╣рд░реВ, рдПрдХ рдирд┐рдпрдордХреЛ рд░реВрдкрдорд╛, рдПрдХрджрдо рдЬрд╡рд╛рди рдЫрдиреН, рдЕрдзреНрдпрдпрди рдкрдЫрд┐ рд╣рд╛рдореАрдХрд╣рд╛рдБ рдЖрдЙрдБрдЫрдиреН, рд╕рд╛рдпрдж рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЬрд╛рднрд╛, рд╡рд╛ C/C++, рд╡рд╛ рдкрд╛рдЗрдерди рдЕрдзреНрдпрдпрди рдЧрд░реЗрдХрд╛ рдерд┐рдПред рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд░рд╛рдореНрд░реЛ рднрд╛рд╖рд╛ рдмреБрдЭреНрди рд╕рдХреНрджреИрдирдиреН, рддрд░ рдПрдХреИ рд╕рдордпрдорд╛ рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд░рд╛рдореНрд░реЛ рд╕рдлреНрдЯрд╡реЗрдпрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред рддреНрдпрд╕реИрд▓реЗ рдЙрдиреАрд╣рд░реВрдХреЛ рднрд╛рд╖рд╛ рдмреБрдЭреНрди рд░ рд╕рд┐рдХреНрди рд╕рдЬрд┐рд▓реЛ рд╣реБрдиреБрдкрд░реНрдЫред
рдК рдкрд░рд┐рдЪрд┐рдд рд╣реБрдиреБрдкрд░реНрдЫ, рд▓рдЧрднрдЧ рд╕реА рдЬрд╕реНрддреИ рдмреЛрд▓реНрдиреЗред Google рдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрд▓реЗ рдЖрдлреНрдиреЛ рдХрд░рд┐рдпрд░ рдЪрд╛рдБрдбреИ рд╕реБрд░реБ рдЧрд░реНрдЫрдиреН рд░ рдкреНрд░рд╛рдпрдГ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рд╣рд░реВ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА C рдкрд░рд┐рд╡рд╛рд░рд╕рдБрдЧ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдиреНрдЫрдиреНред рдирдпрд╛рдБ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рдорд╛ рджреНрд░реБрдд рдЙрддреНрдкрд╛рджрдХрддрд╛рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рднрдиреЗрдХреЛ рднрд╛рд╖рд╛ рдзреЗрд░реИ рдХрдЯреНрдЯрд░рдкрдиреНрдереА рд╣реБрдиреБрд╣реБрдБрджреИрди рднрдиреНрдиреЗ рд╣реЛред
рдХреЗ? рддреНрдпрд╕реЛрднрдП рд░реЛрдм рдкрд╛рдЗрдХрд▓реЗ рдореВрд▓ рд░реВрдкрдорд╛ рдЧреБрдЧрд▓рдХрд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВ рддреНрдпрддрд┐ рд░рд╛рдореНрд░реЛ рдЫреИрдирдиреН рднрдиреА рднрдирд┐рд░рд╣реЗрдХрд╛ рдЫрдиреН, рддреНрдпрд╕реИрд▓реЗ рдЙрдиреАрд╣рд░реВрд▓реЗ рдореВрд░реНрдЦрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рднрд╛рд╖рд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХрд╛ рдЫрдиреН (рд▓рдЧрднрдЧред: рдбрдореНрдм рдбрд╛рдЙрди) рддрд╛рдХрд┐ рддрд┐рдиреАрд╣рд░реВ рдХреЗрд╣рд┐ рдЧрд░реНрди рд╕рдХреНрд╖рдо рдЫрдиреНред рдЖрдлреНрдиреИ рд╕рд╣рдХрд░реНрдореАрд▓рд╛рдИ рдХрд╕реНрддреЛ рдШрдордгреНрдбреА рдирдЬрд░ ? рдореИрд▓реЗ рд╕рдзреИрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реЗрдХреЛ рдЫреБ рдХрд┐ рдЧреБрдЧрд▓рдХрд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВ рдкреГрдереНрд╡реАрдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рдЙрдЬреНрдпрд╛рд▓реЛ рд░ рдЙрддреНрдХреГрд╖реНрдЯрдмрд╛рдЯ рд╣реНрдпрд╛рдиреНрдбрдкрд┐рдХ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред рдкрдХреНрдХреИ рдкрдирд┐ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЕрдЭ рдЧрд╛рд╣реНрд░реЛ рдХреЗрд╣рд┐ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рд╕рдХреНрдЫрдиреН?
рдЕрддреНрдпрдзрд┐рдХ рд╕рд░рд▓рддрд╛ рдХреЛ рдХрд▓рд╛рдХреГрддрд┐
рд╕рд░рд▓ рд╣реБрдиреБ рдХреБрдиреИ рдкрдирд┐ рдбрд┐рдЬрд╛рдЗрдирдорд╛ рдПрдХ рдпреЛрдЧреНрдп рд▓рдХреНрд╖реНрдп рд╣реЛ, рд░ рдХреЗрд╣рд┐ рд╕рд░рд▓ рдмрдирд╛рдЙрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рдЧрд╛рд╣реНрд░реЛ рдЫред рдпрджреНрдпрдкрд┐, рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ (рд╡рд╛ рд╡реНрдпрдХреНрдд) рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрд╛, рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдПрдХ рдЬрдЯрд┐рд▓ рдЙрдкрдХрд░рдг рдЪрд╛рд╣рд┐рдиреНрдЫред рдЬрдЯрд┐рд▓рддрд╛ рд░ рдЬрдЯрд┐рд▓рддрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рдХреЛ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВ рд╣реЛрдЗрдирдиреН, рддрд░ рддреНрдпрд╣рд╛рдБ рдПрдХ рдордзреНрдпрдо рдореИрджрд╛рди рдЫ рдЬрд╕рдорд╛ рднрд╛рд╖рд╛рд▓реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдПрдмреНрд╕реНрдЯреНрд░реНрдпрд╛рдХреНрд╢рдирд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫ рдЬреБрди рдмреБрдЭреНрди рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫред
рдзреЗрд░реИ рдЕрднрд┐рд╡реНрдпрдХреНрдд рдЫреИрди
рдпрд╕рдХреЛ рд╕рд░рд▓рддрд╛рдкреНрд░рддрд┐ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдХреЛ рдХрд╛рд░рдг, Go рд╕рдБрдЧ рдЕрдиреНрдп рднрд╛рд╖рд╛рд╣рд░реВрдорд╛ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд░реВрдкрдорд╛ рдорд╛рдирд┐рдиреЗ рд╕рдВрд░рдЪрдирд╛рд╣рд░реВрдХреЛ рдЕрднрд╛рд╡ рдЫред рдпреЛ рд╕реБрд░реБрдорд╛ рд░рд╛рдореНрд░реЛ рд╡рд┐рдЪрд╛рд░ рдЬрд╕реНрддреЛ рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ, рддрд░ рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛ рдпрд╕рд▓реЗ рд╡рд░реНрдмреЛрдЬ рдХреЛрдбрдорд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдиреНрдЫред рдпрд╕рдХреЛ рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рд╣реБрдиреБрдкрд░реНрджрдЫ - рдпреЛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐рдХреЛ рдХреЛрдб рдкрдвреНрди рд╕рдЬрд┐рд▓реЛ рд╣реБрдиреБ рдЖрд╡рд╢реНрдпрдХ рдЫ, рддрд░ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдпреА рд╕рд░рд▓реАрдХрд░рдгрд╣рд░реВрд▓реЗ рдорд╛рддреНрд░ рдкрдвреНрди рдпреЛрдЧреНрдпрддрд╛рд▓рд╛рдИ рд╣рд╛рдирд┐ рдкреБрд░реНтАНрдпрд╛рдЙрдБрдЫред 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 рдХреЛ рдЬрдмрд░рдЬрд╕реНрддреА verbosity рдмрд╛рдЯреЛрдорд╛ рд╣реБрдиреНрдЫ, рд░ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡рд░реВрдк, рд╕рд╛рдзрд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрджрд╛ рдХреЛрдбрдХреЛ рдареВрд▓реЛ рдорд╛рддреНрд░рд╛рдорд╛ рдкрд░рд┐рдгрд╛рдо рд╣реБрдиреНрдЫред
рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдорд╛ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЫ
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);
}
}
рд░ рдЕрдм рдХреЛ рдзреЗрд░реИ рдкрдвреНрди рдпреЛрдЧреНрдп рдЫ? рдо рдореЗрд░реЛ рднреЛрдЯ D рд▓рд╛рдИ рджрд┐рдиреЗрдЫреБред рдЙрд╕рдХреЛ рдХреЛрдб рдзреЗрд░реИ рдкрдвреНрди рдпреЛрдЧреНрдп рдЫ рдХрд┐рдирднрдиреЗ рдЙрд╕рд▓реЗ рдХрд╛рд░реНрдпрд╣рд░реВ рдЕрдЭ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫред D рдзреЗрд░реИ рдЬрдЯрд┐рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ (рд▓рдЧрднрдЧред:
рдирдХреНрдХрд▓рдХреЛ рдирд░реНрдХ
Go рд▓рд╛рдИ рд╕реБрдзрд╛рд░ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реБрдЭрд╛рд╡ рд╕рд╛рдорд╛рдиреНрдпрддрд╛ рд╣реЛред рдпрд╕рд▓реЗ рдХрдореНрддрд┐рдорд╛ рд╕рдмреИ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрди рдХреЛрдбрдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдирдмрд╛рдЯ рдмрдЪреНрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреВрд░реНрдгрд╛рдВрдХрд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕рдВрдХреНрд╖реЗрдкрдХреЛ рд▓рд╛рдЧрд┐ рдХрд╛рд░реНрдп рдкреНрд░рддреНрдпреЗрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рдпрд╕рдХреЛ рдЖрдзрд╛рд░рднреВрдд рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЯрд╛рдБрд╕реНрдиреЗ рдмрд╛рд╣реЗрдХ рдЕрд░реВ рдХреБрдиреИ рддрд░рд┐рдХрд╛рдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди; рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдЕрдиреНрдп рддрд░рд┐рдХрд╛ рдЫреИрди:
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))
}
рд░ рдпреЛ рдЙрджрд╛рд╣рд░рдгрд▓реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░рдХрд╛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдХрд╛рдо рдЧрд░реНрджреИрдиред рдпреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд▓реЗ рдЖрдлреИрд▓рд╛рдИ рдирджреЛрд╣реЛрд░реНрдпрд╛рдЙрдиреЗ рд╕рд┐рджреНрдзрд╛рдиреНрддрд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЙрд▓реНрд▓рдЩреНрдШрди рдЧрд░реНрджрдЫ (
D рдорд╛ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг:
import std.stdio;
import std.algorithm;
void main(string[] args)
{
[1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}
рд╕рд░рд▓, рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд░ рд╕реАрдзрд╛ рдмрд┐рдиреНрджреБрдорд╛ред рдпрд╣рд╛рдБ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдХрд╛рд░реНрдп рд╣реЛ reduce
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рдХрд╛рд░ рд░ predicate рдХреЛ рд▓рд╛рдЧреАред рд╣реЛ, рдпреЛ рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг рднрдиреНрджрд╛ рдзреЗрд░реИ рдЬрдЯрд┐рд▓ рдЫ, рддрд░ рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрд▓рд╛рдИ рдмреБрдЭреНрди рдЧрд╛рд╣реНрд░реЛ рдЫреИрдиред рдХреБрди рдЙрджрд╛рд╣рд░рдг рд░рд╛рдЦреНрди рд╕рдЬрд┐рд▓реЛ рд░ рдкрдвреНрди рд╕рдЬрд┐рд▓реЛ рдЫ?
рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдмрд╛рдЗрдкрд╛рд╕
рдо рдХрд▓реНрдкрдирд╛ рдЧрд░реНрдЫреБ рдХрд┐ рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВ рдпреЛ рдкрдвреНрджреИ рдореБрдЦрдорд╛ рдлрд┐рдБрдЬ рдЖрдЙрдиреЗрдЫрдиреН рд░ рдХрд░рд╛рдЙрдиреЗрдЫрдиреН, "рддрд┐рдореАрд▓реЗ рдпреЛ рдЧрд▓рдд рдЧрд░реНрджреИрдЫреМ!" рдард┐рдХ рдЫ, рддреНрдпрд╣рд╛рдБ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░реНрдп рд░ рдкреНрд░рдХрд╛рд░рд╣рд░реВ рдмрдирд╛рдЙрдиреЗ рдЕрд░реНрдХреЛ рддрд░рд┐рдХрд╛ рдЫ, рддрд░ рдпрд╕рд▓реЗ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реАрд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рддреЛрдбреНрдЫ!
рд╕рдорд╕реНрдпрд╛рдХреЛ рд╡рд░рд┐рдкрд░рд┐ рдХрд╛рдо рдЧрд░реНрди рдореВрд░реНрдЦ рднрд╛рд╖рд╛ рдлрд┐рдХреНрд╕рдХреЛ рдпреЛ рдЙрджрд╛рд╣рд░рдгрд▓рд╛рдИ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН:
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{}
- рдПрдХ рдкреНрд░рд╣рд╕рди, рд░ рднрд╛рд╖рд╛рдорд╛ рдпреЛ рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд┐рдЩ рдмрд╛рдЗрдкрд╛рд╕ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ рдПрдХ рдЦрд╛рд▓реА рдЗрдиреНрдЯрд░рдлреЗрд╕ рд╣реЛ рд░ рд╕рдмреИ рдкреНрд░рдХрд╛рд░рд▓реЗ рдпрд╕рд▓рд╛рдИ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫ, рд╕рдмреИрдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрдг рд╕реНрд╡рддрдиреНрддреНрд░рддрд╛ рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩрдХреЛ рдпреЛ рд╢реИрд▓реА рдПрдХрджрдореИ рдХреБрд░реВрдк рдЫ, рд░ рддреНрдпреЛ рдорд╛рддреНрд░ рд╣реЛрдЗрдиред рдпреА рдЬрд╕реНрддреИ рдПрдХреНрд░реЛрдмреЗрдЯрд┐рдХ feats рд░рдирдЯрд╛рдЗрдо рдкреНрд░рддрд┐рдмрд┐рдореНрдм рдХреЛ рдкреНрд░рдпреЛрдЧ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЫред рд░реЛрдм рдкрд╛рдИрдХрд▓реЗ рдкрдирд┐ рдпреЛ рджреБрд░реБрдкрдпреЛрдЧ рдЧрд░реНрдиреЗ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрд▓рд╛рдИ рдорди рдкрд░рд╛рдЙрдБрджреИрдирдиреН, рдЬрд╕рд░реА рдЙрдирд▓реЗ рдЖрдлреНрдиреЛ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯрдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реЗред
рдпреЛ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реЛ рдЬреБрди рд╕рд╛рд╡рдзрд╛рдиреА рд╕рдВрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдХрдбрд╛рдЗрдХрд╛ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдирднрдПрд╕рдореНрдо рдпрд╕рдмрд╛рдЯ рдмрдЪреНрдиреБрдкрд░реНрдЫред
рдо рдпреЛ рдмрдХрд╡рд╛рд╕рдХреЛ рд╕рдЯреНрдЯрд╛ D рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВ рд▓рд┐рдиреНрдЫреБред рдХрд╕реИрд▓реЗ рдХрд╕рд░реА рднрдиреНрди рд╕рдХреНрдЫ interface{}
рдЕрдзрд┐рдХ рдкрдвреНрди рдпреЛрдЧреНрдп рд╡рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдЯрд╛рдЗрдк рдкрдирд┐?
рдирд┐рд░реНрднрд░рддрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирдХреЛ рд╕рдорд╕реНрдпрд╛
Go рд╕рдБрдЧ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рдпрдХрд╣рд░реВрдХреЛ рд╢реАрд░реНрд╖рдорд╛ рдирд┐рд░реНрдорд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдгрд╛рд▓реА рдЫ
рдпрд╕ рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕рдорд╛рдзрд╛рдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдкреНрд░рд╢реНрди рд╕реЛрдзреЗрдкрдЫрд┐, рдЧреЛ рд╡рд┐рдХрд╛рд╕ рдЯреЛрд▓реА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдпреЛ
рд╕реА рдмрд╛рдЯ рд╕рд╛рдВрд╕реНрдХреГрддрд┐рдХ рд╕рд╛рдорд╛рди
рдореЗрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛, Go рд▓рд╛рдИ рдЬреАрд╡рдирднрд░ C рдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд░ рдХреЗрд╣рд┐ рдирдпрд╛рдБ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рдирдЪрд╛рд╣реЗрдХрд╛ рдорд╛рдирд┐рд╕рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рднрд╛рд╖рд╛рд▓рд╛рдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рдЩреНрдЧреНрд░рд╛рд╣рд░реВрд╕рдБрдЧ C рдХреЛ рд░реВрдкрдорд╛ рд╡рд░реНрдгрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫредрдореВрд▓ред:
рдЕрд░реНрдХреЛ рдХреНрд░реНрдпрд╛рдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ рдЧреЛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рднрд╛рд╖рд╛ рд╣реЛ (рдЬрд╕реНрддреИ C рдХреЛ рдореМрди рддреНрд░рд╛рд╕рджреА)ред рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╢реИрд▓реАрдорд╛ рдХреЛрдб рд▓реЗрдЦреНрдиреБрд╣реБрдиреНрдЫ рдЬреБрди рдкреБрд░рд╛рддрди рд░ рдкреБрд░рд╛рдиреЛ рдорд╣рд╕реБрд╕ рд╣реБрдиреНрдЫред рдорд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рд╡рд╕реНрддреБ рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рдЪрд╛рдБрджреАрдХреЛ рдмреБрд▓реЗрдЯ рд╣реЛрдЗрди, рддрд░ рд╡рд┐рд╡рд░рдгрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рдХрд╛рд░рд╣рд░реВрдорд╛ рд╕рд╛рд░ рдЧрд░реНрди рд░ рдЗрдирдХреНрдпрд╛рдкреНрд╕реБрд▓реЗрд╢рди рдкреНрд░рджрд╛рди рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреЗрдЫред
рдЖрдлреНрдиреЛ рдлрд╛рдЗрджрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░рд▓рддрд╛
Go рд╕рд░рд▓ рд╣реБрди рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рд░ рдпреЛ рддреНрдпреЛ рд▓рдХреНрд╖реНрдпрдорд╛ рд╕рдлрд▓ рд╣реБрдиреНрдЫред рдпреЛ рдХрдордЬреЛрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд▓реЗрдЦрд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЯреЗрдореНрдкреНрд▓реЗрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреБрд░рд╛рдиреЛ рднрд╛рд╖рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ред рдпреЛ рд╕рд╛рдзрд╛рд░рдг рдЪреАрдЬрд╣рд░реВ рдЧрд░реНрди рд╕рд░рд▓ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рд╕рд╛рде рдкреВрд░реНрдг рдЖрдЙрдБрдЫред рдпреЛ рдкрдвреНрди рд╕рдЬрд┐рд▓реЛ рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫред
рдпреЛ рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрддреНрдпрдиреНрддреИ рд╢рдмреНрдж, рдкреНрд░рднрд╛рд╡рд╣реАрди, рд░ рдЦрд░рд╛рдм рдЫред
╨б╨┐╨░╤Б╨╕╨▒╨╛
рд╕реНрд░реЛрдд: www.habr.com