2015-01-05 6 views
0

저는 개인 프로젝트를 작성하여 공개적으로 읽을 수 있어야하지만 공개적으로 글을 쓸 수없는 경우를 계속해서 찾아 왔습니다. 내가 아는 한,이 경우에 받아 들여지는 "좋은 습관"은 현장을 비공개로 만들고, 바닐라 게터를 쓰고, 모든 것을합시다.별도의 get/set 홍보문이있는 언어

프로그래머가 UNIX 파일 사용 권한과 마찬가지로 읽기/쓰기 액세스 권한을 별도의 수준으로 설정할 수 있으므로 getter의 오버 헤드를 줄일 수 있습니다 (실행 및 개발자 시간 측면에서).

가능한 언어가 있습니까?

+0

프로젝트의 사용자 모델은 무엇입니까? '대중'이란 무엇을 의미합니까? –

+0

사용자가 없습니다. 클래스 필드 홍보 (공개, 비공개, 보호)에 대해 이야기하고 있습니다. – Shriken

+2

Ruby가 이것을 뒤집습니다 : 인스턴스 변수에 대한 공개 액세스가 없습니다. 읽기와 쓰기 모두 항상 접근자를 필요로합니다 (루비 용어로). 기본 접근 자 (변수 읽기/쓰기)를 매우 쉽게 자동 생성 할 수 있습니다. 자동 생성 된 접근자는 속도에 맞게 최적화됩니다. 그러므로,'attr_reader : foo'는 여러분이 묻는 것을 할 것입니다. – Amadan

답변

1

UNIX 파일 시스템 권한과 클래스의 인스턴스 변수 가시성 (public, protected, private, global 등) 간에는 몇 가지 차이점이 있습니다. 전자는 ACL이며 개체에 연결된 사용 권한 목록을 정의하고 후자는 defines how much the rest of the system can access the variable입니다.

방법 중 그와 어쨌든

, ...

루비 정의하여이 다루는 :

를 그래서 나는 경우 외모는 Blog입니다. 같은 :

attr_accessor :title는 '게터'이 같은 '세터'로 번역
class Blog 
    attr_accessor :title 
end 

: 나는 같은 클래스에 attr_reader :title을 정의 된 경우

def title=(value) 
    @title = value 
end 

def title 
    @title 
end 

반대로, 그것은로 번역 가져옵니다 ' 게터

,536 : 세터 ''는로 번역됩니다

def title 
    @title 
end 

attr_writer :title 동안 '

public int Foo { get; private set; } 

이 별도의 getter 메소드를 작성하는 복잡성의 대부분을 저장 :

def title=(value) 
    @title = value 
end 
+0

답변 해 주셔서 감사합니다. UNIX의 경우 : 그렇기 때문에 전역 액세스 권한을 수정하는 것과 관련하여 정말 유사합니다. – Shriken

+1

@Shriken 네, 그 비교를 왜 사용했는지 이해합니다. Fumu의 코멘트를 읽은 후 기본 세부 정보를 공유 할 것입니다. –

+0

Gotcha, 공유 주셔서 감사합니다. – Shriken

1

는 C#에서, 당신은 auto-implemented property가 사용할 수 있습니다. 그리고 getter의 실행 시간 오버 헤드는 none (인라이닝 덕분) 또는 매우 작아야합니다.