ãã®æçš¿ã§ã¯ãã³ãŒããCïŒããFïŒã«ã翻蚳ãããæ¹æ³ã«ã€ããŠã¯èª¬æããŸãããç°ãªããã©ãã€ã ã«ããããããã®åèšèªããã®ã¿ã¹ã¯ã®ç¯å²ã§æé©ã«ãªããŸãã ãã ããã³ãŒãããããã©ãã€ã ããå¥ã®ãã©ãã€ã ã«å€æããããšãèããªããã°ã颿°åããã°ã©ãã³ã°ã®ãã¹ãŠã®å©ç¹ãããéãçè§£ããããšãã§ããŸãã 奜å¥å¿ãçã§å¥œå¥å¿andçã§ããŸã£ããæ°ããããšãåŠã¶æºåãã§ããŸããã ããå§ããŸãããïŒ

FïŒ -developersã®ãã·ã¢èªã³ãã¥ããã£ã®ç¿»èš³ã·ãªãŒãºã®ãã¹ãŠã®è³æã¯ãã¿ã°#fsharplangruã§èŠã€ããããšãã§ããŸãã
åã®èšäºã ãªãFïŒã䜿çšããå¿
èŠãããããã§ãFïŒãä»ãã詊ã䟡å€ãããçç±ã説æããŸããã æ¬¡ã«ãã¢ããªã±ãŒã·ã§ã³ã®æåã«å¿
èŠãªåºæ¬ãåæããŸãã ãã®æçš¿ã¯ãCïŒãJavaããŸãã¯ãã®ä»ã®ãªããžã§ã¯ãæåèšèªã«ç²ŸéããŠãã人ã察象ãšããŠããŸãã ãã§ã«FïŒã§èšè¿°ããŠããå Žåããããã®æŠå¿µã¯ããªãã¿ã®ã¯ãã§ãã
éãã«ãŸã£ããã«
颿°åããã°ã©ãã³ã°ã®æŠå¿µãå匷ããåã«ãå°ããªäŸãèŠãŠãFïŒãCïŒãšã©ã®ããã«ç°ãªããã倿ããŸãããã ããã¯ã2ã€ã®æ©èœãšçµæã衚瀺ããåºæ¬çãªäŸã§ãã
let square x = x * x let sumOfSquares n = [1..n]
åã®æç€ºçãªæç€ºã¯ãªããã»ãã³ãã³ãäžæ¬åŒ§ã¯ãããŸããã æ¬åŒ§ã¯1ãæã§äœ¿çšãããŸããå
¥åå€ãšããŠæ°å€5
ã䜿çšããŠsumOfSquares
颿°ãåŒã³åºããçµæãç»é¢ã«è¡šç€ºããŸãã ãã€ãã©ã€ã³æŒç®å|>
ïŒãã€ãã©ã€ã³æŒç®åïŒã¯ãUnixã®ãã€ãã©ã€ã³ïŒãã€ãããã€ãïŒãšåãæ¹æ³ã§äœ¿çšãããŸãã square
ã¯ã List.map
颿°ã«ãã©ã¡ãŒã¿ãŒãšããŠçŽæ¥æž¡ããã颿°ã§ãïŒFïŒã®é¢æ°ã¯å€ããã¡ãŒã¹ãã¯ã©ã¹é¢æ°ãšããŠæ±ãããŸãïŒã
å®éã«ã¯ããã«å€ãã®éãããããŸãããæåã«åºæ¬çãªããšã«å¯ŸåŠããå¿
èŠããããŸãããããã¯FïŒãçè§£ããããã®éµã ããã§ãã
CïŒããã³FïŒïŒäž»èŠæŠå¿µã®äžèŽ
次ã®è¡šã¯ãCïŒãšFïŒã®éèŠãªæŠå¿µã®ããã€ãã®å¯Ÿå¿ã瀺ããŠããŸãã ããã¯æå³çã«çãäžå®å
šãªèª¬æã§ãããFïŒã®åŠç¿ã®å§ãã«èŠããŠãããšç°¡åã§ãã
CïŒããã³ãªããžã§ã¯ãæåããã°ã©ãã³ã° | FïŒãšé¢æ°åããã°ã©ãã³ã° |
---|
倿° | äžå€ã®å€ |
èª¬ææž | è¡šçŸ |
ã¡ãœãããæã€ãªããžã§ã¯ã | çš®é¡ãšæ©èœ |
ããã€ãã®çšèªã®ã¯ã€ãã¯ããŒãã·ãŒãïŒ
倿°ã¯å€åããå¯èœæ§ã®ããå€ã§ãã ããã¯åœŒãã®ååããæ¥ãŠããŸãïŒ
äžå€å€ã¯ãå²ãåœãŠåŸã«å€æŽã§ããªãå€ã§ãã
åœä»€ã¯ãããã°ã©ã ã®èµ·ååŸã«å®è¡ãããã³ãã³ãã§ãã
åŒã¯ãèšç®ããã³ååŸã§ããã³ãŒãã®äžéšã§ãã
- ã¿ã€ãã¯ãããã°ã©ã å
ã®ããŒã¿ã®åé¡ã§ãã
CïŒåã«ç€ºãããŠãããã®ã¯ãã¹ãŠFïŒã§ãå¯èœã§ããïŒãããŠéåžžã«ç°¡åã«å®è£
ã§ããïŒããšã¯æ³šç®ã«å€ããŸãã FïŒåã«ã¯ãã¯ããã«è€éã§ã¯ãããŸãããCïŒã§ã§ããããšããããŸãã å·Šã®åã®èŠçŽ ã¯FïŒã§ãäžè¯ãã§ã¯ãªãããã®éãåæ§ã§ãã ã¡ãœãããåãããªããžã§ã¯ãã¯FïŒã§ã®äœ¿çšã«æé©ã§ãããç¶æ³ã«å¿ããŠæé©ãªãœãªã¥ãŒã·ã§ã³ã§ããããšããããããŸãã
倿°ã§ã¯ãªãäžå€ã®å€
颿°åããã°ã©ãã³ã°ã§æãçããæŠå¿µã®1ã€ã¯äžå€æ§ïŒäžå€æ§ïŒã§ãã 圌ã¯ã颿°åããã°ã©ãã³ã°æå¥œå®¶ã®ã³ãã¥ããã£ã§ååãªæ³šç®ã济ã³ãŠããªãããšããããããŸãã ãã ããããã©ã«ãã§å€ã倿ŽãããŠããªãèšèªã䜿çšããããšããªãå Žåãããã¯å€ãã®å Žåããã以äžã®åŠç¿ãè¡ãããã®æåã§æãéèŠãªé害ãšãªããŸãã äžå€æ§ã¯ãã»ãšãã©ãã¹ãŠã®é¢æ°åèšèªã®åºæ¬æŠå¿µã§ãã
let x = 1
åã®åŒã§ã¯ãå€1
ãååx
é¢é£ä»ããããŠããŸãã ãã®ååšãéããŠãååx
ã¯å€1
ãåç
§ãã倿Žã§ããŸããã ããšãã°ã次ã®ã³ãŒãã¯x
ã®å€ãåå²ãåœãŠã§ããŸããã
let x = 1 x = x + 1
代ããã«ã2è¡ç®ã¯ã x
x + 1
çãããã©ãããæ±ºå®ããæ¯èŒã§ãã <-
æŒç®åãšmutable
修食åã䜿çšããŠmutate x
ã倿ŽïŒå€æŽïŒããæ¹æ³ããããŸãïŒè©³çްã«ã€ããŠã¯ã å¯å€å€æ°ãåç
§ããŠãã ããïŒã FïŒãå¥ã®å¿
é ããã°ã©ãã³ã°èšèªãšèŠãªããªãå Žåããã®æåŒ·ç¹ã䜿çšã§ããŸãã
äžå€æ§ã¯åºæ¬çã«ãåé¡ã解決ããããã®éåžžã®ã¢ãããŒããå€ããŸãã ããšãã°ã for
ã«ãŒãããã³ãã®ä»ã®åœä»€åããã°ã©ãã³ã°ã®åºæ¬æäœã¯ãFïŒã§ã¯ããŸã䜿çšãããŸããã
ããå
·äœçãªäŸãèããŠã¿ãŸããããå
¥åãªã¹ãã®æ°å€ã2ä¹ããããšããŸãã FïŒã§è¡ãæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
// , let square x = x * x let getSquares items = items |> List.map square let lst = [ 1; 2; 3; 4; 5 ] // F
ãã®äŸã§ã¯for
ã«ãŒãããªãããšã«æ³šæãfor
ãã ããã æŠå¿µã¬ãã«ã§ã¯ãããã¯åœä»€åã³ãŒããšã¯å€§ããç°ãªããŸãã ãªã¹ãå
ã®åã¢ã€ãã ãäºä¹ããŸããã å
¥åãªã¹ãã«square
颿°ãé©çšããäºä¹å€ãååŸããŸãã ããã¯éåžžã«åŸ®åŠãªéãã§ãããå®éã«ã¯å€§å¹
ã«ç°ãªãã³ãŒãã«ã€ãªããå¯èœæ§ããããŸãã ãŸãã getSquares
颿°ã¯å®éã«å®å
šã«æ°ãããªã¹ããäœæããŸãã
äžå€æ§ã¯ããªã¹ãå
ã®ããŒã¿ã管çããåãªãå¥ã®æ¹æ³ãããã¯ããã«åºãæŠå¿µã§ãã åç
§ã®ééæ§ã®æŠå¿µã¯FïŒã«ãšã£ãŠèªç¶ã§ãããã·ã¹ãã èšèšãšãããã®ã·ã¹ãã ã®äžéšãã©ã®ããã«çµã¿åãããããã«å€§ããªåœ±é¿ãäžããŸãã ã·ã¹ãã ã®æ©èœç¹æ§ã¯ãäºæããªãå Žåã«å€ã倿Žãããªãå Žåã«ããäºæž¬å¯èœã«ãªããŸãã
ããã«ãå€ãäžå€ã®å Žåãåæããã°ã©ãã³ã°ã容æã«ãªããŸãã å¯å€ç¶æ
ã®ããã«CïŒã§çºçããããã€ãã®è€éãªåé¡ã¯ãFïŒã§ã¯ãŸã£ããçºçããŸããã FïŒã¯ããã¹ãŠã®ãã«ãã¹ã¬ãããšéåæã®åé¡ãéæ³ã®ããã«è§£æ±ºããããšã¯ã§ããŸããããå€ãã®ããšãç°¡åã«ãªããŸãã
åœä»€ã§ã¯ãªãåŒ
åè¿°ã®ããã«ãFïŒã¯åŒã䜿çšããŸãã ããã¯ãã¹ããŒãã¡ã³ããã»ãšãã©ãã¹ãŠã«äœ¿çšãããCïŒãšã¯å¯Ÿç
§çã§ãã äž¡è
ã®éãã¯äžèŠåãã«è¶³ããªãããã«æãããããããŸããããçæãã¹ãããšã1ã€ãããŸãã衚çŸã¯æå³ãçã¿åºããŸãã æé -ãããã
// 'getMessage' -- , `name` - . let getMessage name = if name = "Phillip" then // 'if' - . "Hello, Phillip!" // . else "Hello, other person!" // . let phillipMessage = getMessage "Phillip" // getMessage, , . 'phillipMessage'. let alfMessage = getMessage "Alf" // 'alfMessage'!
åã®äŸã§ã¯ãFïŒãCïŒã®ãããªåœä»€åèšèªãšåºå¥ããããã€ãã®ãã€ã³ããèŠãããšãã§ããŸãã
if...then...else
ã¯ãåœä»€ã§ã¯ãªãåŒã§ããif
åŒã®åãã©ã³ãã¯å€ãè¿ããŸãããã®å Žåãå€ã¯getMessage
颿°ã®æ»ãå€ã«ãªããŸããgetMessage
颿°ã®ååŒã³åºãã¯ãæååãåãåã£ãŠæååãè¿ãåŒã§ãã
ãã®ã¢ãããŒãã¯CïŒãšã¯éåžžã«ç°ãªããŸãããã»ãšãã©ã®å ŽåãFïŒã§ã³ãŒããèšè¿°ãããšãã«èªç¶ã«æããŸãã
å°ãæ·±ãæãäžãããšãFïŒã§åœä»€ããåŒã䜿çšããŠèšè¿°ãããŸãã ãã®ãããªåŒã¯ãã¿ã€ãunit
å€ãè¿ããŸãã unit
CïŒã®void
ã«å°ã䌌ãŠãvoid
ïŒ
let names = [ "Alf"; "Vasily"; "Shreyans"; "Jin Sun"; "Moulaye" ] // `for`. 'do' , `unit`. // , . for name in names do printfn "My name is %s" name // printfn unit.
åã®for
ã«ãŒãã®äŸã§ã¯ããã¹ãŠãã¿ã€ãunit
ã§ãã unit
åŒã¯ãæ»ãå€ãæããªãåŒã§ãã
FïŒïŒé
åããªã¹ããããã³ã·ãŒã±ã³ã¹
åã®ã³ãŒãäŸã§ã¯FïŒé
åãšãªã¹ãã䜿çšããŠããŸããã ãã®ã»ã¯ã·ã§ã³ã§ã¯ãããã€ãã®è©³çްã«ã€ããŠèª¬æããŸãã
FïŒã¯ããã€ãã®ã¿ã€ãã®ã³ã¬ã¯ã·ã§ã³ãæäŸããæãäžè¬çãªãã®ã¯é
åããªã¹ããããã³ã·ãŒã±ã³ã¹ã§ãã
FïŒã®é
åããªã¹ããããã³ã·ãŒã±ã³ã¹ã«ã¯ãåŒã®ç¹å¥ãªæ§æããããŸãã ããã¯ãããã°ã©ã ã§ããŒã¿ãçæããå¿
èŠãããããŸããŸãªã¿ã¹ã¯ã«éåžžã«äŸ¿å©ã§ãã
// 100 let first100Squares = [ for x in 1..100 -> x * x ] // , ! let first100SquaresArray = [| for x in 1..100 -> x * x |] // , // // Seq.take! let odds = let rec loop x = // seq { yield x yield! loop (x + 2) } loop 1 printfn " 3 : %A" (Seq.take 3 odds) // : " 3 : seq [1; 3; 5]
FïŒé¢æ°ãšLINQã¡ãœããã®å¯Ÿå¿
LINQã¡ãœããã«ç²ŸéããŠããå Žåãæ¬¡ã®è¡šã¯FïŒã®åæ§ã®é¢æ°ãçè§£ããã®ã«åœ¹ç«ã¡ãŸãã
LINQ | FïŒé¢æ° |
---|
Where | filter |
Select | map |
GroupBy | groupBy |
SelectMany | collect |
Aggregate | fold ãŸãã¯reduce |
Sum | sum |
ãŸãã Seq
ã List
ããã³Array
ã¢ãžã¥ãŒã«ã«ãåã颿°ã»ãããååšããããšã«æ°ä»ããããããŸããã Seq
ã¢ãžã¥ãŒã«é¢æ°ã¯ãã·ãŒã±ã³ã¹ããªã¹ãããŸãã¯é
åã«äœ¿çšã§ããŸãã é
åãšãªã¹ãã®é¢æ°ã¯ãããããFïŒã®é
åãšãªã¹ãã«ã®ã¿äœ¿çšã§ããŸãã ãŸããFïŒã®ã·ãŒã±ã³ã¹ã¯é
å»¶åã§ããããªã¹ããšé
åã¯ãšãã«ã®ãã·ã¥ã§ãã ãªã¹ããŸãã¯é
åã§Seq
ã¢ãžã¥ãŒã«é¢æ°ã䜿çšãããšãé
å»¶èšç®ãå¿
èŠã«ãªããæ»ãå€ã®åã¯ã·ãŒã±ã³ã¹ã«ãªããŸãã
åã®ã»ã¯ã·ã§ã³ã«ã¯å€ãã®æ
å ±ãå«ãŸããŠããŸãããFïŒã§ããã°ã©ã ãäœæãããšãçŽæçã«ãªããŸãã
æ©èœã³ã³ãã€
åã®ã³ãŒãäŸã§|>
æŒç®åã䜿çšãããŠããããšã«æ°ã¥ãããããããŸããã UNIXã®ãã€ãã©ã€ã³ã«éåžžã«äŒŒãŠããŸããå·Šã«äœããåããå³ã«äœãã®å
¥åã«æž¡ããŸãã ãã®æŒç®åïŒããã€ãããŸãã¯ããã€ãã©ã€ã³ããšåŒã°ããïŒã¯ã æ©èœçãªãã€ãã©ã€ã³ãäœæããããã«äœ¿çšãããŸãã 以äžã«äŸã瀺ããŸãã
let square x = x * x let isOdd x = x % 2 <> 0 let getOddSquares items = items |> Seq.filter isOdd |> Seq.map square
ãã®äŸã§ã¯ã items
ã¯æåã«Seq.filter
颿°ã®å
¥åã«æž¡ãããŸãã æ¬¡ã«ã Seq.filter
ïŒsequenceïŒã®æ»ãå€ãSeq.map
颿°ã®å
¥åã«æž¡ãããŸãã Seq.map
ã®å®è¡çµæã¯ã getOddSquares
颿°ã®åºåã§ãã
ã³ã³ãã€ãŒã®ãªãã¬ãŒã¿ãŒã¯éåžžã«äœ¿ããããã®ã§ãããã䜿çšããªã人ã¯ã»ãšãã©ããŸããã ããããããã¯FïŒã®æããæ°ã«å
¥ãã®æ©èœã®1ã€ã§ãïŒ
FïŒïŒã¿ã€ã
FïŒã¯.NETãã©ãããã©ãŒã ã®èšèªã§ãããããCïŒãšåãããªããã£ãåïŒ string
ã int
ãæã£ãŠããŸãã .NETãªããžã§ã¯ãã䜿çšãããªããžã§ã¯ãæåããã°ã©ãã³ã°ã®4ã€ã®äž»èŠãªæ±ããµããŒãããŸãã FïŒã¯ã¿ãã« ãããã³CïŒã«ã¯ãªã2ã€ã®äž»èŠãªã¿ã€ããã¬ã³ãŒããšèå¥ãããå
±çšäœãæäŸããŸãã
ã¬ã³ãŒãã¯ãæãæåéãã®æå³ã§ãæ¯èŒæäœãèªåçã«å®è£
ããé åºä»ããããååä»ãå€ã®ã°ã«ãŒãã§ãã æ¯èŒãã©ã®ããã«çºçããããèããå¿
èŠã¯ãããŸããããªã³ã¯ã®ç䟡æ§ãéããŠããŸãã¯2ã€ã®ãªããžã§ã¯ãéã®ç䟡æ§ã®ã«ã¹ã¿ã å®çŸ©ãéããŠã ã¬ã³ãŒãã¯å€ã§ãããå€ãæ¯èŒã§ããŸãã ã«ããŽãªçè«ã®èšèªã話ãã¿ã€ãã¯ãŒã¯ã§ãã ãããã«ã¯å€ãã®çšéããããŸãããæãæçœãªãã®ã®1ã€ã¯ãPOCOãŸãã¯POJOãšããŠäœ¿çšã§ããããšã§ãã
open System // -. // type Person = { Name: string Age: int Birth: DateTime } // `Person` . // , let p1 = { Name="Charles"; Age=27; Birth=DateTime(1990, 1, 1) } // let p2 = { Name="Moulaye" Age=22 Birth=DateTime(1995, 1, 1) } // . Equals() GetHasCode(). printfn " ? %b" (p1 = p2) // `false`, .
FïŒã®ãã1ã€ã®åºæ¬çãªã¿ã€ãã¯ãè±èªæåŠã§ã¯unionsãPO ããŸãã¯DUãšã©ãã«ä»ããããŠããŸãã ROã¯ãå€ãã®ååä»ãããªã¢ã³ãã衚ãã¿ã€ãã§ãã ã«ããŽãªãŒçè«ã®èšèªã§ã¯ãããã¯ååãšåŒã°ããŸãã ãŸããååž°çã«å®çŸ©ããããšãã§ãããããéå±€ããŒã¿ã®èšè¿°ã倧å¹
ã«ç°¡çŽ åãããŸãã
// . // // , - ' . type BST<'T> = | Empty | Node of 'T * BST<'T> * BST<'T> // BST<'T> // BST ! let rec flip bst = match bst with | Empty -> bst | Node(item, left, right) -> Node(item, flip right, flip left) // BST let tree = Node(10, Node(3, Empty, Node(6, Empty, Empty)), Node(55, Node(16, Empty, Empty), Empty)) // ! printfn "%A" (flip tree)
ã¿ãã ïŒ ã¿ã°ä»ããããã¢ãœã·ãšãŒã·ã§ã³ãšFïŒã®åãæŽ»çšããŠããã€ããªæ€çŽ¢ããªãŒãå±éããä»»æã®ã€ã³ã¿ãã¥ãŒãå®è¡ã§ããŸãã
Node
ããªã¢ã³ãã®å®çŸ©ã«å¥åŠãªæ§æãèŠãããšã¯ç¢ºãã§ãã ããã¯å®éã«ã¯ã¿ãã«çœ²åã§ãã ããã¯ãå®çŸ©ããBSTã空ãŸãã¯ã¿ãã«(, , )
ããããã§ããããšãæå³ããŸãã ããã¯çœ²åã«é¢ããã»ã¯ã·ã§ã³ã§ãã詳现ã«èª¬æãããŸã ã
ãã¹ãŠããŸãšããïŒFïŒ60ç§ã§æ§æ
次ã®ã³ãŒãäŸã¯ãFïŒæ§æã®ãã®åªããã¬ãã¥ãŒãæžããFïŒã³ãã¥ããã£ã®ããŒããŒã§ããScott Vlashinã®èš±å¯ãåŸãŠæäŸãããŠããŸãã çŽ1åã§èªãããšãã§ããŸãã ãã®äŸã¯ãããã«ç·šéãããŠããŸãã
// , . . // . (* ( ). *) // ======== "" ( ) ========== // "let" () let myInt = 5 let myFloat = 3.14 let myString = "" // - // ======== ============ let twoToFive = [ 2; 3; 4; 5 ] // , // . let oneToFive = 1 :: twoToFive // :: // : [1; 2; 3; 4; 5] let zeroToFive = [0;1] @ twoToFive // @ // : , ! // ======== ======== // "let" . let square x = x * x // - . square 3 // . . let add xy = x + y // add (x,y)! // . add 2 3 // . // , . // . let evens list = let isEven x = x % 2 = 0 // "isEven" ("") List.filter isEven list // List.filter - // : // , evens oneToFive // // , . // , "map" , // "sum" . // "List.map" "List.sum" let sumOfSquaresTo100 = List.sum (List.map square [ 1 .. 100 ]) // "|>" // sumOfSquares, let sumOfSquaresTo100piped = [ 1 .. 100 ] |> List.map square |> List.sum // "square" // - ( ) // "fun" let sumOfSquaresTo100withFun = [ 1 .. 100 ] |> List.map (fun x -> x * x) |> List.sum // F# - "return" // // ======== ======== // Match..with.. - case/switch " ". let x = "a" match x with | "a" -> printfn "x - a" | "b" -> printfn "x - b" | _ -> printfn "x - - " // " " // Some(..) None Nullable<T> let validValue = Some(99) let invalidValue = None // match..with "Some" "None" // "Some". let optionPatternMatch input = match input with | Some i -> printfn " %d" i | None -> printfn " " optionPatternMatch validValue optionPatternMatch invalidValue // ========= ========= // - , . // . let twoTuple = (1, 2) let threeTuple = ("a", 2, true) // . . type Person = { First: string; Last: string } let person1 = { First="John"; Last="Doe" } // // . let person2 = { First="Jane" Last="Doe" } // . - . type Temp = | DegreesC of float | DegreesF of float let temp = DegreesF 98.6 // . // , -, // : type Employee = | Worker of Person | Manager of Employee list let jdoe = { First="John"; Last="Doe" } let worker = Worker jdoe // ========= ========= // printf/printfn Console.Write/WriteLine C#. printfn " int %i, float %f, bool %b" 1 2.0 true printfn " %s, - %A" "hello" [ 1; 2; 3; 4 ] // printfn "twoTuple=%A,\nPerson=%A,\nTemp=%A,\nEmployee=%A" twoTuple person1 temp worker
ããã«ã.NETããã³ãµããŒããããŠããèšèªã®å
¬åŒããã¥ã¡ã³ãã«ã¯ã ãFïŒTourããšããè³æããããŸãã
次ã«ããããš
ãã®æçš¿ã§èª¬æãããã®ã¯ãã¹ãŠãFïŒã®è¡šé¢çãªæ©èœã«ãããŸããã ãã®èšäºãèªãã åŸãFïŒãšé¢æ°åããã°ã©ãã³ã°ã«æ²¡é ã§ããããšãé¡ã£ãŠããŸãã FïŒãããã«èª¿æ»ããããã®æŒç¿ãšããŠèšè¿°ã§ããäŸãããã€ã瀺ããŸãã
FïŒã䜿çšã§ããã¿ã¹ã¯ã¯ä»ã«ããããããããŸãã åã®ãªã¹ãã¯æ±ºããŠå®å
šãªãã®ã§ã¯ãããŸããã FïŒã¯ããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŸãïŒåçŽãªãã«ãã¹ã¯ãªããããæ°ååã®åçãäžãããªã³ã©ã€ã³ã¹ãã¢ã®ããã¯ãšã³ããŸã§ã FïŒã䜿çšã§ãããããžã§ã¯ãã«å¶éã¯ãããŸããã
远å ã®ãªãœãŒã¹
FïŒã«ã¯ãCïŒãŸãã¯Javaã®çµéšããã人åãã®è³æãªã©ãå€ãã®ãã¥ãŒããªã¢ã«ããããŸãã æ¬¡ã®ãªã³ã¯ã¯ãFïŒã®è©³çްã説æããã®ã«åœ¹ç«ã¡ãŸãã
FïŒã®åŠç¿ãéå§ããä»ã®ããã€ãã®æ¹æ³ã«ã€ããŠã説æããŸãã
æåŸã«ãFïŒã³ãã¥ããã£ã¯éåžžã«åå¿è
ã«åªããã§ãã Slackã«ã¯ãFïŒSoftware FoundationããµããŒãããéåžžã«æŽ»çºãªãã£ãããããã èªç±ã«åå ã§ããåå¿è
ã«ãŒã ããããŸãã è¡ãããšããå§ãããŸãïŒ
ãã·ã¢èªã話ãã³ãã¥ããã£FïŒã®ãµã€ãã蚪ããããšãå¿ããªãã§ãã ããïŒ èšèªã®åŠç¿ã«ã€ããŠè³ªåãããå Žåã¯ããã£ããã«ãŒã ã§ãæ°è»œã«ãçžè«ãã ããã
翻蚳èè
ã«ã€ããŠ
ãã®èšäºã¯ã ãã·ã¢èªã話ãFïŒéçºè
ã®ã³ââãã¥ããã£ã®åªåã«ãã£ãŠç¿»èš³ãããŸããã
@schvepsss .