小编Chr*_*isW的帖子

静态/强类型和重构

在我看来,关于静态/强类型编程语言最有价值的是它有助于重构:如果/当你更改任何API时,编译器会告诉你这个更改已经破坏了什么.

我可以想象用运行时/弱类型语言编写代码......但是如果没有编译器的帮助我无法想象重构,我无法想象在没有重构的情况下编写成千上万行代码.

这是真的?

refactoring static-typing weak-typing strong-typing

6
推荐指数
2
解决办法
1249
查看次数

将数据输入网格

一个UI问题:对于最好的(定义为"最终用户最喜欢的那个")或实现数据输入网格的最差方法,是否存在一些共识?

我有一个网格,有很多行.网格列包含各种类型的属性,用户可以输入/编辑这些属性.属性的"类型"包括:

  • 自由文本
  • 数字(数字)
  • 枚举值(例如'高','中'和'低'之一)
  • 其他(例如日期,持续时间)

"自由文本"类型并不难设计(所以我不会问这个),但接下来的两种类型呢?

数字数字

  • 使用键盘输入数字时,是否允许自由文本输入,然后对模糊运行验证方法?或者,监控每次按键以将数据输入限制为仅限数字?
  • 如何告诉用户(在网格上,而不是在表单上)某些列中数据的语法仅限于数字?如果用户按错了(非数字)键,你会怎么做?
  • 'spin'或'spinner'控件是标准的Windows控件; 是否适合尝试在基于HTML的网格上使用一个?

枚举值

为了使用鼠标输入或编辑枚举值,我想在鼠标点击时弹出一个小的上下文菜单就可以了.

  • 另一种方法是使用<select>输入控件(即组合框).我想尽管拥有一整套组合框并不像拥有一列文本值那样容易阅读(因为组合框添加了额外的非文字墨水)?您如何看待通常显示纯文本,但在字段获取输入焦点时使用组合框替换该文本(然后在模糊时删除组合框)?
  • 当焦点因键盘而变化(即[Tab]键)而不是鼠标的结果(即点击)时,您是否也会在焦点上弹出相同的菜单?换句话说,应该在弹出菜单中选择一个字段吗?顺便提一下,我见过的基于CSS的弹出菜单会响应鼠标但不响应键盘(例如[Up]和[Down]箭头键).您是否知道可以在浏览器中运行的任何类似Intellisense的数据输入实现?

例如?

我也有兴趣看到你认为是一个典范的例子.我对桌面UI和/或浏览器内的答案感兴趣.


编辑:关注[data-entry]标签的另一个问题(" 有人使用Sigma Grid(基于Javascript的可编辑数据网格)吗? "),我正在查看Sigma Grid示例.它做了很多很好的事情IMO(对键盘和即时选择框的良好支持); 但是它对数字字段的支持可能是不完美的,例如,如果我在数字单元格中按"a",那么有时它会弹出一个警告框告诉我我错了(可能工具提示可能不那么干扰),和/或有时它将单元格留空(空白),擦除'a'并且不留任何东西.


编辑以回复以下答案之一.

但是,再次确定表单的主要用途是什么,并针对此进行优化.数据可视化或分析具有与批量输入不同的需求,并且令人满意的键盘用户与键盘+鼠标用户完全不同.

我希望相同的显示(即表格/网格)能够很好地显示现有属性,创建新属性和编辑现有属性.我期待几十个项目(即数十行数据),每个项目只有几列(例如,一列文本/项目描述,以及一个或多个列,用于一个或多个关联项目属性).

一些数据/属性可能是主观的和相对的(例如,每个项目的两个属性是每个项目的'优先级'或'难度',这仅在与其他项目比较时才特别有意义),这是我想要的原因在一个屏幕上一起显示所有数据:以便最终用户可以比较它们.

我的应用程序是针对相对专家(不是新手)的计算机用户,而不是数据输入专家:例如,用户是软件开发人员,项目经理,产品经理,QA人员等,但在某种程度上也是他们的客户; 它在内联网(不是公共互联网)上运行,但是易于使用且易于使用且易于学习和直观学习都非常重要.

此外,我不明白为什么令人满意的键盘用户与键盘+鼠标用户完全不同:我认为单个解决方案可以/应该支持和/或两者兼而有之.

validation user-interface gridview input data-entry

5
推荐指数
1
解决办法
2631
查看次数

Windows 7 - 从开发人员的角度来看会有什么期望?

我将在Windows 7中期待哪些功能:

  1. 作为开发人员,让我的工作更轻松.

要么...

  1. 让我的工作与开发人员"不同"(更难).

我一直听到很多关于性能改进和一些UI效果增强的内容,但没有真正关于Windows 7上的开发会是什么样的.谢谢.

windows windows-7

5
推荐指数
1
解决办法
251
查看次数

"宽度"适用于textarea吗?

CSS 'width'属性适用于<textarea>

在实践中,人们说他们成功地使用它,例如使用这样的规则:

textarea
{
    width:100%;
}
Run Code Online (Sandbox Code Playgroud)

令我困惑的是宽度CSS 2.1规范说,

此属性指定由块级别和替换元素生成的框的内容宽度.此属性不适用于未替换的内联级元素.

我认为textarea是一个内联级元素,因为例如像这样的标记......

<p>
This is some more text:
<textarea name="mytextarea" rows="3" cols="15">Text in the text area</textarea>
And even more, more text.
</p>
Run Code Online (Sandbox Code Playgroud)

...在左侧和右侧创建一个带有文本的单个段落块<textarea>,因此根据规范,宽度不应该适用.

html css textarea width

5
推荐指数
1
解决办法
930
查看次数

何时使用运行时类型信息?

如果我有各种类的子类,以及对这些子类的实例进行操作的算法,并且如果算法的行为根据实例的特定子类略有不同,那么最常用的面向对象的方法是使用虚拟方法.

例如,如果子类是DOM节点,并且算法是要插入子节点,则该算法根据父节点是DOM元素(可以有子节点)还是DOM文本(不能)而不同:因此,该insertChildren方法可以是DomNode基类中的虚拟(或抽象),并且在每个子类DomElementDomText子类中实现不同.

另一种可能性是为实例提供一个公共属性,可以读取其值:例如,算法可能会读取基类的nodeType属性DomNode; 或者另一个例子,您可能有不同类型(子类)的网络数据包,它们共享一个公共数据包标头,您可以读取数据包标头以查看它是什么类型的数据包.

我没有太多使用运行时类型信息,包括:

  • C#中的isas关键字
  • 溯造型
  • 点网中的Object.GetType方法
  • typeidC++中的运算符

当我添加一个取决于子类类型的新算法时,我倾向于在类层次结构中添加一个新的虚方法.

我的问题是,何时使用运行时类型信息而不是虚函数?

c# c++ oop casting runtime-type

5
推荐指数
1
解决办法
2621
查看次数

抽象类中是否有任何空的具体方法?

我最近在查看一些开源代码PicketLink代码.如果你看一下这个类,你会在抽象类中看到一些什么都不做的具体方法.这有什么用途吗?

我想到了两件事:

  1. 如果该方法需要由子类覆盖而未在父抽象类中定义,为什么不简单地将其设为抽象?
  2. 如果只有一些子类实际上需要实现该方法,那么这是否表明需要重构类层次结构,以便不强制孩子使用不适用的方法?

java oop class-hierarchy

5
推荐指数
2
解决办法
5329
查看次数

什么时候不需要“hasOwnProperty”?

什么时候 hasOwnProperty 不需要?

《JavaScript: The Good Parts》一书包含以下内容,其中指出“这通常是必要的”:

另一种形式(称为for in)枚举对象的属性名称(或键)。在每次迭代中,对象中的另一个属性名称字符串被分配给 变量

通常需要测试对象hasOwnProperty(变量)来确定属性名称是否真正是对象的成员,或者是在原型链上找到的。

for (myvar in obj) {
 if (obj.hasOwnProperty(myvar)) {
 ...
 }
}
Run Code Online (Sandbox Code Playgroud)

更具体地说,我想枚举一个简单的类似字典的对象的属性,该对象是使用 Javsacript 对象文字语法创建的,例如:

var foo = { 'bar': 'baz' };
Run Code Online (Sandbox Code Playgroud)

或使用以下命令创建的类似对象JSON.parse

var foo = JSON.parse("{ 'bar': 'baz' }");
Run Code Online (Sandbox Code Playgroud)

hasOwnProperty 当我在对象for in上做的时候我应该使用吗foo

假设此 JavaScript 作为复杂网页的一部分在随机浏览器中运行。

答案是:“实际上,这可能/通常没有必要。理论上,如果某个框架或库通过更改添加属性,则可能是必要的Object.prototype,但Object.prototype这样的更改将是一种侵入性的不良做法,任何受人尊敬的框架都不太可能这样做“?

javascript hasownproperty

5
推荐指数
1
解决办法
1476
查看次数

使用useEffect获取数据时避免旧数据

我的问题是,当自定义钩子使用useEffectwith useState(例如获取数据)时,自定义钩子在依赖项更改之后但在 useEffect 被触发之前返回陈旧数据(来自状态)。

你能提出一个正确/惯用的方法来解决这个问题吗?


我正在使用 React 文档和这些文章来指导我:

我定义了一个函数,它使用useEffect并用于包装数据的获取——源代码是 TypeScript 而不是 JavaScript 但这并不重要——我认为这是“书上写的”:

function useGet<TData>(getData: () => Promise<TData>): TData | undefined {

  const [data, setData] = React.useState<TData | undefined>(undefined);

  React.useEffect(() => {
    getData()
      .then((fetched) => setData(fetched));
  }, [getData]);

  // (TODO later -- handle abort of data fetching)

  return data;
}
Run Code Online (Sandbox Code Playgroud)

应用程序根据 URL 路由到各种组件——例如,这里是获取和显示用户配置文件数据的组件(当给定 URL 时,例如“userId”/sf/users/3495971/在哪里49942):

export const User: React.FunctionComponent<RouteComponentProps> =
  (props: RouteComponentProps) => {

  // …
Run Code Online (Sandbox Code Playgroud)

reactjs react-hooks

5
推荐指数
1
解决办法
2375
查看次数

React reducer 必须是纯函数吗?

我写了一个 UI 元素作为函数组件,它使用 React 的userReducer钩子,它似乎运行没有错误。

useReducer引用了我写的一个函数(想象中称为reducer):

  const [state, dispatch] = React.useReducer(reducer, inputData,
    (inputData) => initialState(inputData));
Run Code Online (Sandbox Code Playgroud)

state数据由reducer函数输入和输出;并且有依赖于的“托管”UI 元素state,例如......

  return (
    <div>
      <div>
        {state.elements.map(getElement)}
      </div>
      <ShowHints hints={state.hints} inputValue={state.inputValue} />
    </div>
  );
Run Code Online (Sandbox Code Playgroud)

...这是正常的。

我担心的是该reducer函数不纯。

  • 它的行为只取决于它的输入参数——所以用相同的输入参数调用它两次具有相同的结果。
  • 然而它会产生副作用,它不仅返回新状态

副作用是有一个<input>元素的状态由以下之一控制:

const inputRef = React.createRef<HTMLInputElement>();
Run Code Online (Sandbox Code Playgroud)

<input>控制只是半管理,是这样的:

<input type="text" ref={inputRef} onKeyDown={handleKeyDown} onChange={handleChange}
Run Code Online (Sandbox Code Playgroud)

onKeyDownonChange事件是行动派的减速(这是好的),但减速传递的HTMLInputElement实例(即inputRef.current值)作为输入参数,并且该减速套房产HTMLInputElement变异的状态-这是不是<input>幸福一个完全托管的组件,其内容由 reducer 的输出状态定义。

为什么原因<input>元素没有被全面管理的是,我需要控制的选择范围(即startend …

typescript pure-function reactjs react-hooks

5
推荐指数
1
解决办法
985
查看次数

动态对象析构函数中的异常

我遇到了这个边缘问题,我通常会忽略" 不要这样做 ",但我在标准中找不到满意的答案,如果有人能指出推理,我会很感激:

假设我有一个在析构函数中抛出异常的类:

struct Foo { ~Foo() { throw std::runtime_error("Catch this!"); } };
Run Code Online (Sandbox Code Playgroud)

如果删除此类的动态分配实例,动态分配的内存会发生什么变化?

auto p = new Foo;

try { delete p; }
catch (std::exception const &) { }
Run Code Online (Sandbox Code Playgroud)

是否调用了释放函数?为什么?我可以通过添加operator delete(p);catch块中来使此代码正确吗?

我用GCC运行了一个小测试,似乎没有自动释放内存.(将此与构造函数中的异常进行对比,在这种情况下,保证调用释放函数(如果存在).)

c++ destructor exception language-lawyer dynamic-allocation

3
推荐指数
1
解决办法
202
查看次数