V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  seakingii  ›  全部回复第 1 页 / 共 43 页
回复总数  846
1  2  3  4  5  6  7  8  9  10 ... 43  
32 天前
回复了 gufeng311 创建的主题 程序员 语法最优雅的编程语言是什么?
@ouou0701 WEB 的前端(Blazor),后端, 桌面端,工控软件,ERP 之类.基本上 JAVA 能搞的 C#也能搞,手机端不怎么行
32 天前
回复了 Hyxiao 创建的主题 程序员 感觉这两年 PostgreSQL 明显越来越火了
我喜欢 PG 的原因

1 一把梭,啥功能都有.比如做一个知识库,有普通的数据库功能,又有向量功能.不需要在当前没有统治级的向量数据库里找一个,学习一个新的软件,找新的客户端库,还可以让 PG 达到 JSON,GIS,REDIS,MQ 这些功能
2 可以用扩展的语言写存储过程
3 数据库功能完整,高效
4 免费,没有什么乱糟糟的法律问题
32 天前
回复了 gufeng311 创建的主题 程序员 语法最优雅的编程语言是什么?
28 分部类.可以将一个类文件,拆分成几个文件,可以达到
1) 将大类按功能拆分成多个文件,更好维护
2) 可以一部分是自动代码生成的,另一个部分是手动修改的,这样即可以利用机器自动产生代码,然后又可以定制这个产生的代码
32 天前
回复了 gufeng311 创建的主题 程序员 语法最优雅的编程语言是什么?
我投 c#

我喜欢 C#的理由

1 强类型
2 语法优雅
3 系统内置的库非常全,而且比较规范
4 第三方库可能没有 JS,JAVA,PYTHON 那么多,但也一般够用
5 可以跨平台
6 默认性能就不错
7 可以利用语法特性写出非常强性能的代码
8 编译速度不错
9 有反射功能
10 有动态的语法


C# 的语法,在我看来,相当的符合人类的直觉,比如

1 前置类型
int a = 1; string name = "Jack";

string Hello(string name){
return "Hello," + name;
}

2 也可以使用类型推断

var a = 1;
var name = "Jack";
List<User> userList = new ();
var userList = new List<User>();

3 字符串插值

var first = "Ma";
var last = "Jack";
var name = $"{first} {last}";

4 字符串可以直接相加.有些语言不是用加号

var name = "Ma" + " " + "Jack";

5 扩展语法.可以直接扩展已有的类(就算是别人写的,第三方的库),最新的版本扩展更强,不过我还没用上.

class MyClass {
public string Name {get;set;}
public MyClass(string name){
this.Name = name;
}
}


static class MyClassExtensition {
public static string GetName(this MyClass myClass){
return this.Name;
}
}

6 属性 Property.有机会在访问/更改字段的时候做一些操作,比起 setName,getName 调用起来优雅


class MyClass {

private string name;

public string Name {
get {
Console.Write(name);
return Name;
}
set{
Console.Write(name);
name = value;
}
}


// 自动属性
public int Age { get; set; } = 99;

// 只读属性初始化
public ICollection<int> Values { get; } = new List<int>();

public int Age { get; init; } // 只能在初始化时设置


}


var m = new MyClass();
m.Name = "Ma Jack";
Console.Write(m.Name);


7 Attribute .可以做一些元编程

[ApiController]
[Route("/api/user")]
public class UserController {

[Route("get_name")]
[HttpGet]
public string GetName(){
return "Ma Jack";
}

}

8 linq, expression ,Lambda

var userList = new List<MyClass>();

var filteredList = userList.Where(v=>v.Name.Contains("J"))
.OrderBy(v=>v.Name)
.Select(v=> "Hello," + v.Name)
.Take(10)
.ToList();

var results = from p in people
where p.Age > 18
orderby p.Name
select p.Name;



9 disposable 模式,释放资源比较优雅

class Db : IDioposable {

private Connection connection;

public Db(){
connection = new Connection();

}

public List QueryList(string sql){
//....
}

public Task<List> QueryListAsync(string sql){
//....
}

public void Dispose(){
connection.Close();
}

}


//调用 DB 类访问数据并自动关闭数据库连接,即使中间有出现异常
using var db = new Db();
var userList = db.QueryList("select * from sys_user");
//--这里自动调用 db.Dispose();


10 async/await

//调用 DB 类访问数据并自动关闭数据库连接,即使中间有出现异常
using var db = new Db();
var userList = await db.QueryListAsync("select * from sys_user");
//--这里自动调用 db.Dispose();

11 修饰
public
private
protected
readonly
static
...

12 静态类和静态构造

static class Tools {

static string NewMd5(){
return ...;
}

}


class class User {

static List<User> cachedUserList = new ();

//静态构造
static User(){
cachedUserList = GetUserListFromDatabase();
}


}

// 模块级初始化
[ModuleInitializer]
internal static void Initialize()
{
// 模块加载时自动执行
}


13 模式匹配 (C# 7.0+)

// 类型模式
if (obj is string s)
{
Console.WriteLine(s.Length);
}

// 常量
if (count is 0)
{
Console.WriteLine("Empty");
}

// Switch 表达式
var result = shape switch
{
Circle c => $"Circle with radius {c.Radius}",
Rectangle r => $"Rectangle {r.Width}x{r.Height}",
_ => "Unknown shape"
};


//递归
if (person is { Address: { City: "New York" } })
{
Console.WriteLine("New Yorker");
}

14 元组和解构


(int x,int y) GetCoordinates(){
return (100,200);
}


// 元组解构
var (x, y) = GetCoordinates();

var (_, _, area) = GetShapeInfo(); // 忽略前两个返回值



15 字符串定义

var str = "1";
var str = @"1";
var str = $"now : {DateTime.Now}";
var json = """
{
"name": "John",
"age": 30
}
""";

16 空条件运算符 (?. 和 ?[])


Customer? customer = GetCustomer();

var length = customer?.Orders?[0]?.Description?.Length;


// 空合并运算符
var name = customer?.Name ?? "Unknown";

// 空合并赋值 (C# 8.0+)
list ??= new List<int>();




17 结构类型.高效

struct Point {
public int X {get;set;}
public int Y {get;set;}
}

18 记录类型 (C# 9.0+)

public record Person(string FirstName, string LastName);

//clone
var newPerson = person with { LastName = "Smith" };


if (person is not null and { Age: >= 18 })
{
// ...
}


// 不可变且自带值语义比较
var person1 = new Person("John", "Doe");
var person2 = person1 with { LastName = "Smith" };

19 索引与范围 (C# 8.0+)

var lastItem = array[^1]; // 最后一个元素
var slice = array[1..4]; // 从索引 1 到 3 的元素


20 命名参数与可选参数

public void Configure(int width, int height = 600, string title = "App")
{
// ...
}

// 调用
Configure(width: 800, title: "My Application");


21 重载

public class MyClass {

private string name {get;set;}

public MyClass(){
this.name = "---";
}

public MyClass(string name){
this.name = name;
}


public string Hello(){
return "Hello," + name;
}

public string Hello(string s){
return s + name;
}


}


22 集合初始化

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var dict = new Dictionary<int, string>
{
[1] = "One",
[2] = "Two"
};


23 操作符可重载

24 局部函数

public int Factorial(int n)
{
return Compute(n);

int Compute(int k) => k <= 1 ? 1 : k * Compute(k - 1);
}

25 表达式成员

public override string ToString() => $"{FirstName} {LastName}";
public double Area => Width * Height;

26 nameof 表达式


Console.WriteLine(nameof(Person.Name)); // 输出 "Name"

27 调用方信息特性

void Log([CallerMemberName] string member = "",
[CallerFilePath] string file = "",
[CallerLineNumber] int line = 0)
{
Console.WriteLine($"{file}:{line} in {member}");
}
361 天前
回复了 ggp1ot2 创建的主题 GitHub Copilot cursor pro 的 500 次用完了怎么办?
@falcon05 请教,快速和慢速有什么区别,会特别慢吗?
```
原数据: {"width":50,"height":180,"weight":50,"age":30,"name":"lalala","partner":{"width":28,"height":170,"weight":49,"age":30,"name":"bobo","adc":"acasdv"},"children":[{"width":30,"height":100,"weight":40,"age":12,"name":"liliya","friends":[{"name":"tom","type":"cat"},{"name":"bam","type":"dog"}]},{"width":45,"height":160,"weight":45,"age":15,"name":"tifny","friends":[{"name":"erix","gender":"male"}]}]}

编码数据: {"1":30,"2":[{"1":12,"2":[{"2":"tom","3":"cat"},{"2":"bam","3":"dog"}],"3":100,"4":"liliya","5":40,"6":30},{"1":15,"2":[{"1":"male","2":"erix"}],"3":160,"4":"tifny","5":45,"6":45}],"3":180,"4":"lalala","5":{"1":30,"2":170,"3":"bobo","4":49,"5":28,"adc":"acasdv"},"6":50,"7":50}

解码数据: {"age":30,"children":[{"age":12,"friends":[{"name":"tom","type":"cat"},{"name":"bam","type":"dog"}],"height":100,"name":"liliya","weight":40,"width":30},{"age":15,"friends":[{"gender":"male","name":"erix"}],"height":160,"name":"tifny","weight":45,"width":45}],"height":180,"name":"lalala","partner":{"age":30,"height":170,"name":"bobo","weight":49,"width":28,"adc":"acasdv"},"weight":50,"width":50}

```
2024-08-05 09:02:06 +08:00
回复了 KJH 创建的主题 程序员 感觉.NET 比 Java 难多了
另外, 越新的版本, 运行速度越快. .NET 团队会不断的优先底层逻辑.
2024-08-05 09:01:11 +08:00
回复了 KJH 创建的主题 程序员 感觉.NET 比 Java 难多了
.NET 这边越新的版本,功能越好.


我一直想有的一个功能 ,就是 能用 GO 一样 AOT 编译网站项目, 目前还不是很行. 但随着几个大版本更新,可能会越来越好.
2024-08-05 08:57:14 +08:00
回复了 KJH 创建的主题 程序员 感觉.NET 比 Java 难多了
@KJH "那学.net8 之后能上手 3.1 么, 我理解公司项目应该不会迭代这么快把" 可以的

实际上可以直接用 最新的,没有什么问题, .NET 的质量还是有保证的,一个大版本正式上线前有 N 个测试版本在跑很久了.我从来都是用最新的.
这个事件让我长见识了,幸好我一般不用 公用 CSS CDN

国内好多公司下限真低
2024-07-09 10:13:33 +08:00
回复了 knt09 创建的主题 计算机 新配置了电脑,怎样利用大内存加速文件读取和系统速度?
@vopsoft 你说的 IO 模式是 "SCSI"和"Direct-IO"中的 "Direct-IO"模式吧? 我用的是默认的 SCSI,可能是因为这个原因兼容性好一点
2024-07-08 09:09:28 +08:00
回复了 knt09 创建的主题 计算机 新配置了电脑,怎样利用大内存加速文件读取和系统速度?
@vopsoft 你这个其它软件的 RAMDISK 速度差的离谱

除了速度,还有一些软件兼容性的问题,以前我用其它软件,比如软件魔方的,AMD(好像是 AMD)的, 会有一些软件不能识别我虚拟的 Z 盘. 但是 Primo Ramdisk 基本没有这个识别不了的问题
2024-07-06 13:09:26 +08:00
回复了 knt09 创建的主题 计算机 新配置了电脑,怎样利用大内存加速文件读取和系统速度?
我也是 128G,用了七八年,

PrimoCache 对 硬盘/SSD 做缓存
Primo Ramdisk 做一个内存盘,将不重要的临时文件放在内存盘,比如我会将火狐的 Cache,Temp 目录 ,某些项目的编译中间文件

在硬盘的年代效果非常突出,随着 SSD 越来越便宜,越来越快,这样搞法收益越来越低
2024-07-03 10:51:05 +08:00
回复了 imes 创建的主题 Rust RUST 的未来在哪里?
@guotie 很痛苦.尝试使用,找 http client,好像官方刚刚添加,很不完善,搜索例子文档,跑不起来!
简单点,先学 js + vue ,再选择一个 UI 框架,比如 ele ,
可以考虑用 HBuilder ,虽然被吐槽,但开发效率高
2024-07-02 13:55:27 +08:00
回复了 imes 创建的主题 Rust RUST 的未来在哪里?
@guotie zig 现在体验怎么样?几个月前试用了一下,感觉这个库没有,那个库没有,包管理都不方便
一般的内存盘软件,可能会出现部分软件识别不了路径的问题,我碰到过某个语言还是什么包管理,会出这样的问题

收费的 Primo Ramdisk 貌似好一点,后来我花钱买了 Primo Ramdisk ,一直在用
2024-06-04 09:26:49 +08:00
回复了 cowcomic 创建的主题 程序员 后台学前端用什么技术栈比较好
学 VUE,国内用的多
VUE+uni-app 可以做小程序和 APP
VUE+ 任意 WEBVIEW 外壳,可以做 WINDOWS 程序
如果只是想了解计算机的底层,建议学 C 语言
更底层的,汇编语言
1  2  3  4  5  6  7  8  9  10 ... 43  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1010 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 28ms · UTC 22:40 · PVG 06:40 · LAX 15:40 · JFK 18:40
Developed with CodeLauncher
♥ Do have faith in what you're doing.