У меня есть вопрос относительно соглашений об использовании блоков do в F#. В первую очередь это возникает при работе с классами библиотеки .NET и другим кодом .NET.
Позвольте привести пример.
<сильный>1. С блоком do, обернутым вокруг инструкций:
let drawHelloName (width:int, height:int) name =
let bmp = new Bitmap(width, height)
use fnt = new Font("Arial", 12.0f)
use gr = Graphics.FromImage(bmp)
do
gr.Clear(Color.White)
gr.DrawString(name, fnt, Brushes.Black, PointF(10.0f, 10.0f))
bmp
<сильный>2. Без блока do:
let drawHelloName (width:int, height:int) name =
let bmp = new Bitmap(width, height)
use fnt = new Font("Arial", 12.0f)
use gr = Graphics.FromImage(bmp)
gr.Clear(Color.White)
gr.DrawString(name, fnt, Brushes.Black, PointF(10.0f, 10.0f))
bmp
Сейчас я думаю, что пример 1 понятнее и ближе к сути и стилю F#. Поскольку работать с операторами в функциональном программировании не совсем «естественно», мы явно заключаем операторы в блок do, чтобы показать, что они являются побочными эффектами. Но мне интересно, какова конвенция по этому поводу?
unit
, что во многих случаях делаетdo
излишним. - person Daniel   schedule 09.12.2014