在我看来,关于静态/强类型编程语言最有价值的是它有助于重构:如果/当你更改任何API时,编译器会告诉你这个更改已经破坏了什么.
我可以想象用运行时/弱类型语言编写代码......但是如果没有编译器的帮助我无法想象重构,我无法想象在没有重构的情况下编写成千上万行代码.
这是真的?
一个UI问题:对于最好的(定义为"最终用户最喜欢的那个")或实现数据输入网格的最差方法,是否存在一些共识?
我有一个网格,有很多行.网格列包含各种类型的属性,用户可以输入/编辑这些属性.属性的"类型"包括:
"自由文本"类型并不难设计(所以我不会问这个),但接下来的两种类型呢?
数字数字
枚举值
为了使用鼠标输入或编辑枚举值,我想在鼠标点击时弹出一个小的上下文菜单就可以了.
<select>
输入控件(即组合框).我想尽管拥有一整套组合框并不像拥有一列文本值那样容易阅读(因为组合框添加了额外的非文字墨水)?您如何看待通常显示纯文本,但在字段获取输入焦点时使用组合框替换该文本(然后在模糊时删除组合框)?例如?
我也有兴趣看到你认为是一个典范的例子.我对桌面UI和/或浏览器内的答案感兴趣.
编辑:关注[data-entry]标签的另一个问题(" 有人使用Sigma Grid(基于Javascript的可编辑数据网格)吗? "),我正在查看Sigma Grid示例.它做了很多很好的事情IMO(对键盘和即时选择框的良好支持); 但是它对数字字段的支持可能是不完美的,例如,如果我在数字单元格中按"a",那么有时它会弹出一个警告框告诉我我错了(可能工具提示可能不那么干扰),和/或有时它将单元格留空(空白),擦除'a'并且不留任何东西.
编辑以回复以下答案之一.
但是,再次确定表单的主要用途是什么,并针对此进行优化.数据可视化或分析具有与批量输入不同的需求,并且令人满意的键盘用户与键盘+鼠标用户完全不同.
我希望相同的显示(即表格/网格)能够很好地显示现有属性,创建新属性和编辑现有属性.我期待几十个项目(即数十行数据),每个项目只有几列(例如,一列文本/项目描述,以及一个或多个列,用于一个或多个关联项目属性).
一些数据/属性可能是主观的和相对的(例如,每个项目的两个属性是每个项目的'优先级'或'难度',这仅在与其他项目比较时才特别有意义),这是我想要的原因在一个屏幕上一起显示所有数据:以便最终用户可以比较它们.
我的应用程序是针对相对专家(不是新手)的计算机用户,而不是数据输入专家:例如,用户是软件开发人员,项目经理,产品经理,QA人员等,但在某种程度上也是他们的客户; 它在内联网(不是公共互联网)上运行,但是易于使用且易于使用且易于学习和直观学习都非常重要.
此外,我不明白为什么令人满意的键盘用户与键盘+鼠标用户完全不同:我认为单个解决方案可以/应该支持和/或两者兼而有之.
我将在Windows 7中期待哪些功能:
要么...
我一直听到很多关于性能改进和一些UI效果增强的内容,但没有真正关于Windows 7上的开发会是什么样的.谢谢.
CSS 'width'
属性适用于<textarea>
?
在实践中,人们说他们成功地使用它,例如使用这样的规则:
textarea
{
width:100%;
}
Run Code Online (Sandbox Code Playgroud)
此属性指定由块级别和替换元素生成的框的内容宽度.此属性不适用于未替换的内联级元素.
我认为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>
,因此根据规范,宽度不应该适用.
如果我有各种类的子类,以及对这些子类的实例进行操作的算法,并且如果算法的行为根据实例的特定子类略有不同,那么最常用的面向对象的方法是使用虚拟方法.
例如,如果子类是DOM节点,并且算法是要插入子节点,则该算法根据父节点是DOM元素(可以有子节点)还是DOM文本(不能)而不同:因此,该insertChildren
方法可以是DomNode
基类中的虚拟(或抽象),并且在每个子类DomElement
和DomText
子类中实现不同.
另一种可能性是为实例提供一个公共属性,可以读取其值:例如,算法可能会读取基类的nodeType
属性DomNode
; 或者另一个例子,您可能有不同类型(子类)的网络数据包,它们共享一个公共数据包标头,您可以读取数据包标头以查看它是什么类型的数据包.
我没有太多使用运行时类型信息,包括:
is
和as
关键字typeid
C++中的运算符当我添加一个取决于子类类型的新算法时,我倾向于在类层次结构中添加一个新的虚方法.
我的问题是,何时使用运行时类型信息而不是虚函数?
我最近在查看一些开源代码PicketLink代码.如果你看一下这个类,你会在抽象类中看到一些什么都不做的具体方法.这有什么用途吗?
我想到了两件事:
什么时候 hasOwnProperty
不需要?
《JavaScript: The Good Parts》一书包含以下内容,其中指出“这通常是必要的”:
另一种形式(称为
for in
)枚举对象的属性名称(或键)。在每次迭代中,对象中的另一个属性名称字符串被分配给 变量。通常需要测试对象。
hasOwnProperty(
变量)
来确定属性名称是否真正是对象的成员,或者是在原型链上找到的。Run Code Online (Sandbox Code Playgroud)for (myvar in obj) { if (obj.hasOwnProperty(myvar)) { ... } }
更具体地说,我想枚举一个简单的类似字典的对象的属性,该对象是使用 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
这样的更改将是一种侵入性的不良做法,任何受人尊敬的框架都不太可能这样做“?
我的问题是,当自定义钩子使用useEffect
with 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) 我写了一个 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)
在onKeyDown
和onChange
事件是行动派的减速(这是好的),但减速传递的HTMLInputElement
实例(即inputRef.current
值)作为输入参数,并且该减速套房产HTMLInputElement
变异的状态-这是不是<input>
幸福一个完全托管的组件,其内容由 reducer 的输出状态定义。
为什么原因<input>
元素没有被全面管理的是,我需要控制的选择范围(即start
和end …
我遇到了这个边缘问题,我通常会忽略" 不要这样做 ",但我在标准中找不到满意的答案,如果有人能指出推理,我会很感激:
假设我有一个在析构函数中抛出异常的类:
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++ ×2
oop ×2
react-hooks ×2
reactjs ×2
c# ×1
casting ×1
css ×1
data-entry ×1
destructor ×1
exception ×1
gridview ×1
html ×1
input ×1
java ×1
javascript ×1
refactoring ×1
runtime-type ×1
textarea ×1
typescript ×1
validation ×1
weak-typing ×1
width ×1
windows ×1
windows-7 ×1