package Foo
type Bar is private;
procedure Initialize (Item : in out Bar);
private
type Bar is record
Baz : Integer;
Qux : Float;
end record;
end Foo;
Users of the Foo package know there is an opaque type called Bar. They can declare variables of the type, they can use the defined API to operate on it but they cannot reference the implementation defined private members (Baz, Qux) without compile errors. Yes Ada does give you the power and tools to in a very blatantly unsafe and obvious way cast it as another type or as an array of bytes or whatever but if you're doing stuff like that you have already given up. class Bar {
constructor() {
this.Baz = 420;
this.Qux = 1337.69;
}
}
export function Initialize() {
return new Bar();
}
In client code you have no issue inspecting and using the private values of that class: import { Initialize } from 'module';
let myBar = Initialize();
myBar.Baz = 42069; // works just fine
Object.keys(myBar).forEach(console.log); // you can iterate parameters.
myBar.Quux = 'Corge'; // add new parameters
delete myBar.Baz; // I hope no functions rely on this...
Using the private parts of Bar should 100% be a compilation error and even the most broken languages would have it at least be a runtime error. Lmao JS.
However I don't really want to talk to you. You are rude.