سلام درود خدمت همراهان همیشگی سایت پی وی لرن . با آموزش زبان برنامه نویسی #F همراهتون هستیم. اف شارپ دارای نوعی از value type است که ساختار (structure ) نامیده می شود و از کلمه کلیدی struct برای ایجاد یک ساختار استفاده می شود. در این قسمت ساختارها در #F و سینتکس تعریف ساختار در #F رو داریم.
یک ساختار در #F یک نوع داده value type است. که به شما کمک می کند یک متغیر واحد را ایجاد کنید، داده های مربوط به انواع داده های مختلف را نگه دارید.
کلمه کلیدی struct برای ایجاد یک ساختار استفاده می شود.
سینتکس تعریف ساختار در #F به شرح زیر است:
1 2 3 4 5 6 7 8 9 10 | [ attributes ] type [accessibility-modifier] type-name = struct type-definition-elements end // or [ attributes ] [<StructAttribute>] type [accessibility-modifier] type-name = type-definition-elements |
دو سینتکس وجود دارد. اولین سینتکس بیش تر استفاده می شود، زیرا اگر شما از کلمات کلیدی struct و end استفاده کنید، می توانید Attribute StructAttribute را حذف کنید.
عناصر تعریف ساختار فراهم می کند:
بر خلاف کلاس ها، ساختار ها یا structures نمی توانند به ارث برده شوند و نمی توانند حاوی let یا do bindings باشند. از آن جا که سازه ها let bindings ندارند؛
شما باید با استفاده از کلمه کلیدی val، فیلدهای ساختار را اعلام کنید.
وقتی فیلد و نوع آن را با استفاده از کلید واژه val تعریف می کنید، نمی توانید مقدار فیلد را مقداردهی اولیه کنید، در عوض آن ها به zero یا null مقدار دهی اولیه می شوند.
بنابراین برای یک ساختار دارای ساختار ضمنی، اعلان های val با خصیصه DefaultValue تعریف نمی شود.
برنامه زیر یک ساختار line همراه با سازنده را ایجاد می کند. این برنامه طول خط را با استفاده از ساختار محاسبه می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | type Line = struct val X1 : float val Y1 : float val X2 : float val Y2 : float new (x1, y1, x2, y2) = {X1 = x1; Y1 = y1; X2 = x2; Y2 = y2;} end let calcLength(a : Line)= let sqr a = a * a sqrt(sqr(a.X1 - a.X2) + sqr(a.Y1 - a.Y2) ) let aLine = new Line(1.0, 1.0, 4.0, 5.0) let length = calcLength aLine printfn "Length of the Line: %g " length |
هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.
1 | Length of the Line: 5 |
در این قسمت ساختارها در #F و سینتکس تعریف ساختار در #F رو داشتیم .
و همونطور که دیدیم بر خلاف کلاس ها، ساختارها یا structures نمی توانند به ارث برده شوند.