前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >X# 点滴(一):注释和变量

X# 点滴(一):注释和变量

作者头像
firstxinjie
发布2024-12-06 13:58:31
发布2024-12-06 13:58:31
6600
代码可运行
举报
文章被收录于专栏:X#(XSharp)X#(XSharp)
运行总次数:0
代码可运行

说明:

  • 本系列的所有观点是站在一个 X# 嘎嘎新的新手角度来说的。
  • 所有描述均针对其中的 Visual Foxpro 方言。
  • 所有和 VFP 的对比,均默认是 VFP9 SP2 7423 版本。
  • IDE :VS 2022(社区版)

注释:

X# 中的注释,可以使用以下四种方式:

代码语言:javascript
代码运行次数:0
运行
复制
// 这是单行注释内容
/* 这是多行注释内容 */
* 这是单行注释内容
&& 这是单行注释内容

1 和 2 这两种方式同 C#;3 和 4 两种方式是典型的 VFP 语法。

快捷键:Ctrl+E C

变量:

变量声明:在 VFP 中,变量无需事先声明即可使用,例如:

代码语言:javascript
代码运行次数:0
运行
复制
lnNumber = 3
? lnNumber      && 输出 3

在 X# 中仍然可以以这样的方式使用变量。前提:你需要在项目属性中明确启用以下两项:

项目属性

描述

Enable Memvar support(允许内存变量支持)

启用对内存变量(MEMVAR、PUBLIC、PRIVATE 和 PARAMETERS)的支持。

Enable Undeclared variables support(允许未声明变量支持)

启用对未声明变量的支持(这些变量被解析为 MEMVAR)。注意,需同时启用 Enable Memvar support

在 X# 中同样可以使用 Public / Local 来声明变量。它和 VFP 基本一致。唯一不同的是可以在声明时可选的为变量赋值(详见 Help):

代码语言:javascript
代码运行次数:0
运行
复制
Public lnNumber = 3
Local lnNumber = 4

Private 命令仍旧是支持的。但是它和 VFP 中的使用有所不同。X# 中该命令用于声明(创建)私有变量;VFP 中该命令“在当前程序中隐藏指定的调用程序中定义的内存变量或数组”并且“不会创建内存变量”。例如下面的程序在 VFP 中是正确的,但是在 X# 中会产生编译错误:

代码语言:javascript
代码运行次数:0
运行
复制
Private lnNumber
Local lnNumber

基于以上描述,可以确定的是在X#中,使用 Visual Foxpro 方言,完全兼容 VFP 语法。

但是,因为X#是强类型语言,所以,我们应该关注以下已知问题从而获得更好的编码体验:

当完全使用 VFP 语法来定义变量时,损失了三样东西:

  1. Intellisense(智能感应):完全兼容 VFP 语法的变量定义会丧失 VS IDE 所能提供的智能感应信息;
  2. 只能在生成解决方案时发现错误:这一点和 VFP 是完全一样的;
  3. 代码执行效率:因为兼容就意味着“损失”。

X# 是强类型语言,所以,如果不想损失的更多,应该使用符合 X# 的语法,在使用变量前事先予以声明:

当然,使用 X# 固有的语法声明变量,还有一个好处,也就是说,它可以让我们真正的意识到一个问题:X# 中一切都是对象!

关于第三点问题,X# 开发组的 Robert 明确的解释过,参见:

Variable declarations https://www.xsharp.eu/forum/topic/1389

“I would not recommend that. It will produce code that is much less efficient The least that you should do is declare them locally. But it is much better to either declare the type yourself or use the VAR syntax and let the compiler determine the type.”

(我不建议这样做。它将生成效率低得多的代码,您至少应该做的是在本地声明它们。但是最好自己声明类型或使用 VAR 语法并让编译器确定类型。)

还有一个问题,就算变量前的 m. 问题。

在 VFP 中,有人习惯在变量名称前加上这个前缀以区分到底是变量名还是字段名。VFP 开发小组中的 Calvin Hsia 曾解释说:“Restated: if you have VFP code that accesses a variable with a syntax that *could* be a field reference, and there is a possibility that a cursor is open in the current workarea as well, preface that variable with “m.” for better performance. VFP then “knows” that it can’t be a field name.”

Foxpro Performance tip: field name lookup for tables https://learn.microsoft.com/zh-cn/archive/blogs/calvin_hsia/foxpro-performance-tip-field-name-lookup-for-tables

FoxPro 的性能技巧:表中的字段名 https://github.com/vfp9/My_Translation/blob/main/calvin_hsia/FoxPro%20%E7%9A%84%E6%80%A7%E8%83%BD%E6%8A%80%E5%B7%A7%EF%BC%9A%E8%A1%A8%E4%B8%AD%E7%9A%84%E5%AD%97%E6%AE%B5%E5%90%8D.md

按我个人的理解,在 VFP 中,这是一个最廉价的提高程序执行速度的方案。但是,在 X# 中,不需要了。在 X# 中存在的意义,仅仅是为了“兼容”(我找不到出处了,但是在我的印象中, Robert 没有表述过在 X# 中的 m. 变量前缀是为了区分变量名和字段名而存在)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 xinjie的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档