📄 43.asp
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>VB 内功讲座(一)</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=big5">
<META NAME="Author" CONTENT="KJ Wang">
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (Win95; I) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#808080" ALINK="#FF0000">
<H1 ALIGN=CENTER><B><FONT COLOR="#0000FF">VB 程式设计内功讲座(一)</FONT><FONT COLOR="#008080"><FONT SIZE=+0> /王国荣</FONT></FONT></B></H1>
<CENTER><P>
<HR WIDTH="100%"></P></CENTER>
<CENTER><TABLE WIDTH="90%" >
<TR>
<TD>近 几 年 来 , 视 觉 化 软 体 开 发 工 具 大 行 其 道 , 尤 其 自 "Visual"
Basic 成 功 以 来 , 其 他 软 体 开 发 工 具 亦 纷 纷 起 而 效 之 , 除
了 在 名 称 上 冠 上 Visual 之 外 , 视 觉 化 设 计 亦 无 不 成 为 必 备
之 功 能 , 宛 如 视 觉 化 设 计 就 是 软 体 开 发 的 万 灵 丹 。
<P>笔 者 相 信 视 觉 化 设 计 可 协 助 我 们 更 快 速 地 开 发 出 应 用
软 体 , 但 不 可 否 认 的 , 软 体 的 开 发 过 程 中 , 最 常 遭 遇 的
问 题 还 是 : 程 式 有 没 有 bug、 执 行 效 能 如 何 、 是 否 符 合 使
用 者 的 需 求 … 等 , 而 如 何 克 服 这 些 问 题 则 取 决 於 程 式 设
计 者 的 功 力 , 而 不 在 视 觉 化 开 发 工 具 上 面 。
</P>
<P>怎 样 加 强 程 式 设 计 的 功 力 呢 ? 闭 门 苦 修 个 三 年 五 载 ?
那 倒 不 必 , 有 没 有 速 成 班 呢 ? 笔 者 觉 得 没 有 , 但 的 确 有
若 干 重 要 的 环 节 , 若 能 打 通 , 则 可 缩 短 苦 练 的 功 夫 , 本
期 就 让 笔 者 为 您 节 说 这 些 环 节 。 <BR>
</P>
</TD>
</TR>
</TABLE></CENTER>
<P><A NAME="S00"></A>
<HR WIDTH="100%"><B><FONT COLOR="#0000FF"><FONT SIZE=+2>本 文 大 纲</FONT></FONT></B>
</P>
<UL>
<TABLE>
<TR>
<TD WIDTH="250"><IMG SRC="BLUEBALL.gif" HEIGHT=15 WIDTH=21><A HREF="#S0">变
数</A></TD>
<TD><IMG SRC="BLUEBALL.gif" HEIGHT=15 WIDTH=21><A HREF="#S3">表 单</A></TD>
</TR>
<TR>
<TD><IMG SRC="BLUEBALL.gif" HEIGHT=15 WIDTH=21><A HREF="#S1">物 件</A></TD>
<TD><IMG SRC="BLUEBALL.gif" HEIGHT=15 WIDTH=21><A HREF="#S4">结 语</A></TD>
</TR>
<TR>
<TD><IMG SRC="BLUEBALL.gif" HEIGHT=15 WIDTH=21><A HREF="#S2">控 制 元 件</A></TD>
<TD></TD>
</TR>
</TABLE>
<P> </P>
</UL>
<P>
<HR WIDTH="100%"></P>
<H2><A NAME="S0"></A><FONT COLOR="#0000FF">变数</FONT></H2>
<UL>
<P>变 数 , 这 应 该 是 基 础 的 基 础 吧 , 这 麼 简 单 的 东 西 也 能
够 增 强 程 式 设 计 的 功 力 ? 如 果 您 这 麼 想 , 那 就 大 错 特 错
了 , 变 数 犹 如 程 式 中 的 血 液 , 如 果 程 式 病 了 , 最 可 能 的
原 因 就 是 血 液 遭 受 病 毒 的 侵 袭 , 不 彻 底 研 究 血 液 , 便 很
难 把 生 病 的 程 式 治 好 。</P>
</UL>
<H3><U>组成变数的四大要素</U></H3>
<UL>
<P>什 麼 是 变 数 ? 我 们 写 一 个 数 学 方 程 式 , 假 设 是 : <BR>
</P>
<UL>
<P><FONT COLOR="#3333FF">X = Y + 10</FONT></P>
</UL>
<P>这 里 面 就 有 两 个 变 数 , 一 个 是 X, 一 个 是 Y。 X 及 Y 在 这
里 是 变 数 的 「 名 称 」 ; 而 当 Y 等 於 2 时 , X 等 於 12, 此 时
2 及 12 分 别 是 变 数 X 与 Y 的 「 值 」 。 </P>
<P>以 上 是 我 们 从 数 学 方 程 式 中 所 看 到 的 变 数 , 它 包 含 两
个 元 素 : 名 称 与 值 。 若 从 电 脑 的 角 度 来 看 , X 的 值 12 必
须 储 存 在 某 一 个 地 方 , 也 就 是 记 忆 体 的 某 一 个 「 位 址 」
之 下 , 所 以 位 址 又 是 变 数 的 另 一 个 元 素 。 </P>
<P>为 了 表 达 一 个 变 数 , 只 有 以 上 三 个 元 素 往 往 还 是 不 够
的 , 举 例 来 说 : <BR>
</P>
<UL>
<P><FONT COLOR="#3333FF">A = "RUN!VB "</FONT></P>
</UL>
<P>这 时 候 储 存 变 数 A(等 於 "RUN!VB")所 需 的 空 间 , 显
然 比 储 存 变 数 X(等 於 12)所 需 的 空 间 来 得 大 , 而 且 连 操 作
两 种 变 数 的 方 式 也 會 有 所 差 异 , 例 如 我 们 可 以 这 样 写 X/2,
但 如 果 我 们 这 样 写 A/2 就 没 有 意 义 了 , 为 了 区 别 特 性 不 同
的 变 数 , 程 式 语 言 中 的 变 数 必 须 再 增 加 一 个 元 素 「 资 料
型 别 」 , 以 前 面 的 例 子 来 看 , 变 数 X 是 整 数 (Integer)型 别
, 而 变 数 A 是 字 串 (String)型 别 。 </P>
<P>综 合 以 上 的 讨 论 , 我 们 可 以 用 以 下 四 个 元 素 : 「 名 称
」 、 「 资 料 型 别 」 、 「 位 址 」 、 及 「 值 」 来 表 示 一 个 变
数 , 如 图 -1, 在 图 -1中 , 由 於 「 值 」 是 储 存 在 某 一 个 「 位
址 」 的 记 忆 体 里 面 的 , 所 以 把 它 画 在 位 址 的 框 框 里 面 。</P>
<CENTER><P><A HREF="43-1.gif">图 -1 变 数 的 四 个 组 成 元 素</A> </P></CENTER>
<P>利 用 以 上 四 个 元 素 来 表 示 变 数 , 可 以 解 释 一 些 平 常 想
当 然 尔 的 叙 述 , 如 图 -2 的 「 X = Y + 10」 : (假 设 Y 的 值 等 於
123)</P>
<CENTER><P><BR>
<A HREF="43-2.gif">图 -2 叙 述 「 X = Y + 10」 的 运 算 过 程</A> </P></CENTER>
<P>这 里 顺 便 介 绍 两 个 术 语 : r-value 及 l-value。 r-value 是 right
value 的 缩 写 , 表 示 等 号 右 边 的 变 数 , 如 例 子 中 的 Y, 实 质
上 代 表 的 是 变 数 的 「 值 」 , l-value 是 left value 的 缩 写 , 表
示 等 号 左 边 的 变 数 , 如 例 子 中 的 X, 实 质 上 代 表 的 是 变 数
的 「 位 址 」 。 </P>
<P>以 上 我 们 用 变 数 的 组 成 元 素 来 解 释 简 单 的 例 子 , 看 起
来 没 有 特 别 的 价 值 , 但 这 是 变 数 的 根 本 道 理 , 它 同 时 可
以 用 来 解 说 复 杂 、 以 及 容 易 让 人 搞 错 的 例 子 , 请 务 必 瞭
解 这 几 个 元 素 的 意 义 。 </P>
<P>瞭 解 变 数 的 组 成 元 素 之 後 , 就 不 容 易 被 VB 的 「 定 型 变
数 」 及 「 不 定 型 变 数 」 给 搞 晕 了 , 兹 说 明 如 下 : </P>
<P><FONT COLOR="#CC0000">◆ 定型变数</FONT> </P>
<P>此 一 类 型 的 变 数 在 宣 告 时 會 指 明 变 数 的 「 资 料 型 别 」
, 例 如 : <BR>
</P>
<UL>
<P><FONT COLOR="#000080">Dim X As Integer ' X 是整数型别 <BR>
Dim S As String ' S 是字串型别 <BR>
</FONT> </P>
</UL>
<CENTER><P><A HREF="43-3.gif">图-3 定型变数</A> </P></CENTER>
<P>此 一 类 型 变 数 最 大 的 特 色 在 於 其 资 料 型 别 是 「 固 定 的
」 , 也 就 是 说 , 当 我 们 宣 告 变 数 时 , 指 定 给 它 某 一 型 别
後 , 它 就 永 远 是 那 个 型 别 , 而 且 将 来 就 只 能 与 型 别 「 相
同 」 或 「 相 容 」 的 变 数 做 运 算 , 举 例 来 说 , 以 下 的 例 子
會 出 现 错 误 : <BR>
</P>
<UL>
<P><FONT COLOR="#000080">Dim X as Integer <BR>
X = "这是字串" ' 执行时會出现「型态不符合」的讯息 <BR>
</FONT> </P>
</UL>
<P><FONT COLOR="#CC0000">◆ 不定型变数</FONT> </P>
<P>什 麼 是 不 定 型 变 数 ? 请 看 以 下 例 子 : <BR>
</P>
<UL>
<P><FONT COLOR="#000080">Dim X ' 宣告一个变数 X,但未指定资料型别 <BR>
X = 123 ' 此时 X 的资料是「整数」型别 <BR>
... <BR>
X = "VB" ' 後来又变成了「字串」型别 <BR>
</FONT> </P>
</UL>
<CENTER><P><A HREF="43-4.gif">图 -4 不 定 型 变 数 在 不 同 时 间 被 指
定 成 不 同 的 资 料 型 别</A> </P></CENTER>
<P>变 数 X 在 某 一 个 时 间 被 指 定 成 「 整 数 」 的 资 料 型 别 ,
但 是 後 来 它 又 被 指 定 成 另 一 种 资 料 型 别 ─ 「 字 串 」 , 像
X 这 样 , 资 料 型 别 可 以 变 来 变 去 的 变 数 就 是 「 不 定 型 」
变 数 。 </P>
<P>不 定 型 变 数 的 缺 点 是 执 行 效 率 比 较 差 , 为 什 麼 呢 ? 由
於 它 的 资 料 型 别 是 可 变 动 的 , 因 此 每 次 执 行 时 必 须 先 判
断 变 数 当 时 的 资 料 型 别 , 无 形 中 增 加 了 执 行 上 的 负 担 。
</P>
<P>不 过 您 也 别 把 不 定 型 变 数 想 得 太 糟 糕 , 上 述 的 「 额 外
负 担 」 对 大 部 份 的 程 式 来 说 , 其 影 响 都 相 当 有 限 , 一 般
而 言 需 要 注 意 的 地 方 是 避 免 在 费 时 较 久 的 回 圈 中 使 用 不
定 型 变 数 , 例 如 : <BR>
<BR>
</P>
<UL>
<P><FONT COLOR="#000099">Dim X</FONT> <BR>
<FONT COLOR="#000099">Dim I</FONT> <BR>
<FONT COLOR="#000099"> </FONT> <BR>
<FONT COLOR="#000099">For I = 0 To 30000</FONT> </P>
<UL>
<P><FONT COLOR="#000099">X = "AAAA"</FONT></P>
</UL>
<P><FONT COLOR="#000099">Next I</FONT></P>
</UL>
<P>如 果 我 们 将 Dim X 及 Dim I 分 别 修 改 成 Dim X As String 及 Dim
I As Integer, 则 执 行 速 度 将 有 明 显 的 改 善 。 </P>
<P>反 观 不 定 型 变 数 有 什 麼 优 点 呢 ? 首 先 是 它 比 较 接 近 人
类 的 思 考 模 式 。 谁 规 定 变 数 一 旦 被 指 定 成 某 一 种 资 料 型
别 後 , 就 不 能 改 变 了 , 所 以 变 数 的 型 别 可 以 变 来 变 去 本
来 就 比 较 容 易 使 用 , 此 外 , 它 也 比 定 型 变 数 更 容 易 应 用
到 物 件 导 向 的 程 式 中 , 羭 个 例 子 : 假 设 我 们 在 程 式 中 會
使 用 到 许 多 物 件 , 而 这 些 物 件 各 具 有 不 同 的 资 料 型 别 ,
为 了 管 理 这 些 物 件 , 我 们 想 把 它 们 集 中 放 在 一 起 , 其 中
最 简 便 的 方 式 就 是 采 用 阵 列 , 所 以 程 式 可 能 是 : </P>
<P><FONT COLOR="#000099"> Set ObjArr(1) = 物件_1</FONT> <BR>
<FONT COLOR="#000099"> Set ObjArr(2) = 物件_2</FONT> <BR>
<FONT COLOR="#000099"> ...</FONT> <BR>
<FONT COLOR="#000099"> Set ObjArr(N) = 物件_N</FONT> </P>
<P>由 於 ObjArr 是 一 个 阵 列 , 假 如 我 们 把 它 宣 告 成 「 定 型 变
数 」 , 那 麼 该 将 它 定 义 成 「 物 件 _1」 的 资 料 型 别 、 还 是
「 物 件 _2」 的 资 料 型 别 , 还 是 … , 显 然 是 行 不 通 的 , 如
果 把 这 个 阵 列 宣 告 成 「 不 定 型 变 数 」 , 则 阵 列 中 的 每 一
个 元 素 就 可 以 依 程 式 执 行 时 的 状 况 来 改 变 其 资 料 型 别 ,
自 然 而 然 就 满 足 了 这 个 需 求 。 <BR>
</P>
</UL>
<H3><U>不同资料型别的「值」转换</U></H3>
<UL>
<P>当 我 们 将 一 个 单 精 准 度 型 别 (Single)的 数 值 9.8 指 定 给 一
个 「 不 定 型 」 变 数 X 时 , 此 一 不 定 型 变 数 X 除 了 「 值 」 元
素 會 变 成 9.8 之 外 , 「 资 料 型 别 」 元 素 则 會 变 成 Single,
但 如 果 我 们 将 同 样 的 9.8 指 定 给 一 个 整 数 (Integer)型 别 的 变
数 Y, 结 果 又 如 何 呢 ? 此 时 由 於 Y 为 「 定 型 」 变 数 , 其 「
资 料 型 别 」 元 素 (等 於 Integer)是 不 可 变 的 , 因 此 , 9.8 必 须
被 转 换 成 整 数 , 然 後 才 指 定 到 Y 的「值 」 元 素 中 。</P>
<CENTER><P><BR>
<A HREF="43-5.gif">图-5 同一数值,指定给不同型别变数後的差异</A> </P></CENTER>
<P>由 於 不 同 型 别 的 变 数 能 够 互 相 指 定 与 运 算 , 所 以 我 们
经 常 可 以 在 VB 程 式 中 看 到 「 值 」 转 换 的 例 子 , 如 : </P>
<P><FONT COLOR="#000099"> Dim I As Integer</FONT> <BR>
<FONT COLOR="#000099"> I = "123" ' 字串 "123"
先转换成 123,再指定给 I</FONT> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -